C# 5.0 最酷的事情之一是async/await
关键字以及它如何简化您过去必须使用任务并行库 (TPL) 编写的管道。
我的问题是,如果你有线程不可知的代码并且你碰巧在主线程上触发了一个异步操作(阅读:UI 线程),但你不一定关心继续是否发生在主线程上,那么你能告诉async/await
范式您是否希望它在第一个可用线程上继续,即使它不是主线程?
我认为能够做到这一点会大大提高某些场景的效率,但不是灵丹妙药。
C# 5.0 最酷的事情之一是async/await
关键字以及它如何简化您过去必须使用任务并行库 (TPL) 编写的管道。
我的问题是,如果你有线程不可知的代码并且你碰巧在主线程上触发了一个异步操作(阅读:UI 线程),但你不一定关心继续是否发生在主线程上,那么你能告诉async/await
范式您是否希望它在第一个可用线程上继续,即使它不是主线程?
我认为能够做到这一点会大大提高某些场景的效率,但不是灵丹妙药。
如果您不关心该方法的其余部分在哪里继续,请使用Task.ConfigureAwait
:
await foo.DoSomethingAsync().ConfigureAwait(continueOnCapturedContext: false);
(您不必在这里使用命名参数,但它会增加清晰度。)
有关更多详细信息,请参阅Stephen Cleary 的“最佳实践”文章的“配置上下文”部分。