根据MSDN杂志上的一篇文章,"尽可能使用"是最佳做法ConfigureAwait(false).此外,它指出,"如果你可以ConfigureAwait在一个方法中的某个时刻使用,那么我建议你在那个点之后的那个方法中使用它." 该文章的作者Stephen Cleary 在他的博客中指出"在你的'库'异步方法中,尽可能使用ConfigureAwait(false)[强调添加]."
鉴于我await在库项目中的大部分或全部语句应该被广泛使用,是否.ConfigureAwait(false)可以做某事/更改设置以使其在我的项目/ dll中等待的默认行为不能继续在捕获的上下文?也就是说,我可以省略所有调用.ConfigureAwait(false),而只在我需要保留上下文时添加..ConfigureAwait(true)
Ste*_*ary 16
不,没有选择.Microsoft团队确实考虑了编译器设置或该行为的某些内容,但最终拒绝了它.
主要原因是如果不知道如何设置编译器开关,很难说出代码的行为方式.
Jef*_*ger 11
现在有第三方库支持这一点.该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);
}
}
Run Code Online (Sandbox Code Playgroud)
我自己没有尝试过这个,但鉴于我对Fody插件如何工作的了解,它肯定是可能的.
| 归档时间: |
|
| 查看次数: |
2110 次 |
| 最近记录: |