method handling false configureawait await async c# async-await

handling - static method async c#



Configurar ConfigureAwait(falso) para todo el proyecto/dll (2)

Ahora hay una biblioteca de terceros que soporta esto. El paquete ConfigureAwait.Fody Nuget le permite usar un atributo ConfigureAwait para marcar una clase, ensamblaje o método de tal manera que todas las .ConfigureAwait(false) deban ser .ConfigureAwait(false) . La página del proyecto tiene este ejemplo de uso:

using Fody; [ConfigureAwait(false)] public class MyAsyncLibrary { public async Task MyMethodAsync() { await Task.Delay(10); await Task.Delay(20); } public async Task AnotherMethodAsync() { await Task.Delay(30); } }

No lo he intentado yo mismo , pero dado lo que sé sobre cómo funcionan los complementos de Fody, es ciertamente posible.

De acuerdo con un artículo en la revista MSDN , es la mejor práctica "Usar ConfigureAwait(false) cuando pueda". Además, indica: "Si puede usar ConfigureAwait en algún momento dentro de un método, le recomiendo que lo use para cada espera en ese método después de ese punto". Stephen Cleary , el autor de ese artículo, declara en su blog que "En los métodos asíncronos de su ''biblioteca'' , use ConfigureAwait (falso) siempre que sea posible [énfasis añadido]".

Dado que la mayoría o todas mis declaraciones de await en un proyecto de biblioteca que se pretende que se use ampliamente deben tener .ConfigureAwait(false) es posible hacer algo / cambiar una configuración para que el comportamiento predeterminado de espera dentro de mi proyecto / dll es no continuar en el contexto capturado? Es decir, para que pueda omitir todas las llamadas a .ConfigureAwait(false) y, en su lugar, agregar .ConfigureAwait( true ) solo cuando necesito preservar el contexto.


No, no hay opción para esto. El equipo de Microsoft consideró una configuración del compilador o algo por ese comportamiento, pero terminó rechazándolo.

La razón principal es que es bastante difícil saber cómo se comporta el código sin saber cómo se establece el conmutador del compilador.