我正在寻找正确的用法,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
方法?
还是仅在私有RunBackgroundTask方法上需要它?
每种方法应自行ConfigureAwait(false)
决定。这是因为每个方法都在处捕获其自己的上下文await
,而不管其调用者/被调用方法做什么。ConfigureAwait
配置一个await
; 它根本不会“流动”。
因此,RunBackgroundTask
需要确定“我需要根据自己的情况继续吗?” 如果否,则应使用ConfigureAwait(false)
。
并且StartMyProgram
需要确定“我需要根据自己的情况继续吗?” 如果否,则应使用ConfigureAwait(false)
。