在 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 核心上运行,该核心没有上下文开头。
通常建议在不需要上下文的情况下等待异步调用时使用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 核心上运行,该核心没有上下文开头。