- 在默认情况下,一个 async 方法在被 await 调用后恢复运行时,会在原来的上下文中运行。
- 如果是 UI 上下文,并且有大量的 async 方法在 UI 上下文中恢复,就会引起性能上的问题。
- 为了避免在上下文中恢复运行,可调用 ConfigureAwait 方法,将其参数continueOnCapturedContext 设为 false来解决:
async Task ResumeOnContextAsync()
{
await Task.Delay(TimeSpan.FromSeconds(1));
// 这个方法在同一个上下文中恢复运行。
}
async Task ResumeWithoutContextAsync()
{
await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false);
// 这个方法在恢复运行时,会丢弃上下文。
}