Является ли ConfigureAwait (false) необходимым / полезным при ожидании асинхронных вызовов в функциях Azure - PullRequest
1 голос
/ 05 апреля 2019

Обычно рекомендуется использовать ConfigureAwait(false) при ожидании асинхронных вызовов, когда контекст не требуется. Просто интересно, есть ли польза от использования ConfigureAwait(false) в функциях Azure.

Имеют ли потоки функции Azure ненулевое значение SynchronizationContext, поэтому было бы целесообразно использовать ConfigureAwait(false), чтобы избежать ненужного захвата и повторного планирования продолжения ожидания на захваченном SynchronizationContext?

Добавлять ConfigureAwait(false) в конце каждого асинхронного вызова не очень удобно, поэтому предпочитайте избегать его для кода, который выполняется в функциях Azure, если нет перфорации или любого другого связанного усиления.

Просмотр кода хоста функции Azure: https://github.com/Azure/azure-functions-host/blob/918b057707acfb842659c9dad3cef0193fae1330/src/WebJobs.Script.WebHost/WebScriptHostManager.cs#L181

Похоже, что хост-функция Azure пытается удалить SynchronizationContext ASP.NET перед вызовом функции Azure.

1 Ответ

2 голосов
/ 08 апреля 2019

Просто интересно, есть ли какое-либо преимущество использования ConfigureAwait (false) в функциях Azure.

Нет, если ваш код знает, что он работает в этом контексте, нет.

В моем коде функций Azure я делю его на код "library-ish" в отдельных проектах библиотеки и код "функций Azure".Я использую ConfigureAwait(false) в проектах библиотек, поскольку они (по крайней мере, теоретически) могут быть повторно использованы в других приложениях.

Но для кода, который знает, что он работает в функциях Azure, нет ConfigureAwait(false)необходимо.Хост v1 удалит SynchronizationContext, а хост v2 будет работать на ASP.NET Core, у которого нет контекста для начала.

...