小编Vik*_*nov的帖子

为什么总是推荐使用 await 在每一行上写 ConfigureAwait(false) ,我真的需要它吗?

问题不在于 ConfigureAwait 做什么。但更确切地说,为什么我到处都能看到类似的东西

一般来说,是的。除非该方法需要其上下文,否则应为每个等待使用 ConfigureAwait(false)。

即他们建议我应该写

await Method1().ConfigureAwait(false);
await Method2().ConfigureAwait(false);
// Do something else
// ...
await Method3().ConfigureAwait(false);
await Method4().ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,只在一开始就重置上下文不会更清楚,就像

await Task.Yield().ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

它保证下面的代码将在没有同步上下文的情况下执行,不是吗?

即我读到如果该方法立即返回,则写一次 ConfigureAwait 可能不起作用。对我来说,显而易见的解决方案看起来像调用 ConfigureAwait(false) 肯定不会立即返回的东西,Task.Yield 是什么,对吧?

另外我知道 Task.Yield 不再包含 ConfigureAwait(不知道为什么,因为我知道它以前曾经有它),但是查看 Task.Yield 代码很容易编写自己的方法除了用空的同步上下文调用延续之外,什么都不做。

对我来说,阅读似乎要容易得多,尤其是当你写一次的时候写

await TaskUtility.ResetSyncContext();
Run Code Online (Sandbox Code Playgroud)

而不是在每一行上写 ConfigureAwait。

这会起作用(Task.Yield().ConfigureAwait(false) 或类似的自定义方法)还是我错过了什么?

c# async-await .net-core

4
推荐指数
1
解决办法
875
查看次数

标签 统计

.net-core ×1

async-await ×1

c# ×1