在 Azure Functions 中等待异步调用时,ConfigureAwait(false) 是否需要/有益

Dog*_*lan 9 synchronizationcontext async-await azure-functions azure-functions-runtime azure-function-async

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

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

ConfigureAwait(false)在每次异步调用结束时添加有点麻烦,因此如果没有性能/或任何其他相关增益,则最好避免在 Azure Functions 中运行的代码中使用它。

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

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

Ste*_*ary 12

只是想知道在 Azure Functions 中使用 ConfigureAwait(false) 有什么好处。

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

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

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

  • 此外,在协调器中等待 `ActivityFunctions` 时,不要将 `ConfigureAwait` 与 [DurableFunctions](https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview) 一起使用功能。请参阅 [https://github.com/MicrosoftDocs/azure-docs/issues/24080](https://github.com/MicrosoftDocs/azure-docs/issues/24080)。 (3认同)