在 Azure Functions 中等待异步调用时是 ConfigureAwait(false) needed/beneficial

Is ConfigureAwait(false) needed/beneficial when awaiting async calls in Azure Functions

通常建议在不需要上下文的情况下等待异步调用时使用ConfigureAwait(false)。只是想知道在 Azure Functions 中使用 ConfigureAwait(false) 有什么好处。

Azure Function 线程是否具有非空 SynchronizationContext,因此使用 ConfigureAwait(false) 避免不必要地捕获它并重新安排等待继续返回到捕获的 SynchronizationContext 将是有益的?

在每个异步调用的末尾添加 ConfigureAwait(false) 有点混乱,因此如果没有 perf/or 任何其他调用,最好避免在 Azure Functions 中运行的代码相关增益。

查看 azure 函数主机代码: https://github.com/Azure/azure-functions-host/blob/918b057707acfb842659c9dad3cef0193fae1330/src/WebJobs.Script.WebHost/WebScriptHostManager.cs#L181

似乎 azure 函数主机试图在调用 azure 函数之前删除 ASP.NET SynchronizationContext。

Just wondering is there any benefit of using ConfigureAwait(false) in Azure Functions.

如果您的代码知道它在该上下文中是 运行,则不会。

在我的 Azure Functions 代码中,我将其分为单独库项目中的 "library-ish" 代码和 "Azure Functions" 代码。我确实在库项目中使用 ConfigureAwait(false),因为它们(至少在理论上)可以在其他应用程序中重用。

但是对于在 Azure Functions 中知道它是 运行 的代码,不需要 ConfigureAwait(false)。 v1 主机将删除 SynchronizationContext,而 v2 主机在 ASP.NET 核心上运行,该核心没有上下文开头。