我在各处阅读到,应该使用ConfigureAwait(false)
来避免死锁并提高性能。我们的应用程序中正在使用ConfigureAwait
,但是可能会删除ConfigureAwaits,因为它会导致不同线程的执行上下文。
不同线程的执行上下文有时会导致翻译出现问题。因为在不同的执行上下文中无法访问当前区域设置和当前用户界面区域设置。
我已经使用以下代码对其进行了一些测试,但没有产生任何性能差异。我知道这不是一个好的测试,因为在此简单测试中使用的线程不多。
static async Task MyMethodAsync()
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < 1000; i++)
{
await Task.Delay(10);
await Task.Delay(10).ConfigureAwait(continueOnCapturedContext: false);
}
stopwatch.Stop();
Console.WriteLine("Await: " + stopwatch.Elapsed.ToString());
}
static async Task MyMethodAsyncNoAwait()
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < 1000; i++)
{
await Task.Delay(10);
await Task.Delay(10);
}
stopwatch.Stop();
Console.WriteLine(stopwatch.Elapsed.ToString());
}
如何正确地测试这个?删除所有的 ConfigureAwaits 是否是一个非常糟糕的想法?