为整个项目/ dll设置ConfigureAwait(false)
根据MSDN杂志上的一篇文章,最好的做法是“尽可能使用ConfigureAwait(false)
”。 此外,它指出,“如果你可以在方法中的某个时刻使用ConfigureAwait
,那么我建议你在那个点之后的那个方法中使用它。” 该文章的作者Stephen Cleary 在他的博客中指出“在你的‘库’异步方法中,尽可能使用ConfigureAwait(false)[强调添加]。”
鉴于我在广泛使用的库项目中的大部分或全部await
语句都应该有.ConfigureAwait(false)
是否可以执行某些操作/更改设置以使其成为我项目中await的默认行为/ dll是不是继续捕获上下文? 也就是说,我可以省略对.ConfigureAwait(false)
所有调用,而只在我需要保留上下文时添加.ConfigureAwait(
true
)
。
不,没有选择。 Microsoft团队确实考虑了编译器设置或该行为的某些内容,但最终拒绝了它。
主要原因是如果不知道编译器开关的设置方式,很难说出代码的行为方式。
现在有一个支持这个的第三方库。 ConfigureAwait.Fody Nuget包允许您使用ConfigureAwait
属性来标记类,程序集或方法,以便所有等待都应该是.ConfigureAwait(false)
。 项目页面具有以下示例用法:
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); } }
我自己没有尝试过这个 ,但鉴于我对Fody插件如何工作的了解,它肯定是可能的。