温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - How to use ConfigureAwait on async methods
asynchronous c# task

c# - 如何在异步方法上使用ConfigureAwait

发布于 2020-03-27 11:31:54

我正在寻找正确的用法,ConfigureAwait我已经确定了一个有效的用例ConfigureAwait(即,在等待之后不需要调用线程同步上下文),并且看不到任何关于ConfigureAwait在异步方法上使用的建议

我的代码如下所示

Public async Task StartMyProgram()
{
     await RunBackgroundTask();
}

Private async Task RunBackgroundTask()
{
     await Task.Delay(5000);
}

为了ConfigureAwait正确使用,我假设应该在两个await调用中都使用此代码,例如以下代码:

Public async Task StartMyProgram()
{
     await RunBackgroundTask().ConfigureAwait(false);
}

Private async Task RunBackgroundTask()
{
     await Task.Delay(5000).ConfigureAwait(false);
}

还是我只需要使用私有RunBackgroundTask方法?

查看更多

查看更多

提问者
user1
被浏览
90
Stephen Cleary 2019-07-03 23:29

还是仅在私有RunBackgroundTask方法上需要它?

每种方法应自行ConfigureAwait(false)决定。这是因为每个方法都在处捕获其自己的上下文await,而不管其调用者/被调用方法做什么。ConfigureAwait配置一个await; 它根本不会“流动”。

因此,RunBackgroundTask需要确定“我需要根据自己的情况继续吗?” 如果否,则应使用ConfigureAwait(false)

并且StartMyProgram需要确定“我需要根据自己的情况继续吗?” 如果否,则应使用ConfigureAwait(false)