gpt4 book ai didi

c# - ConfigureAwait(false) 性能测试

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:47 24 4
gpt4 key购买 nike

我到处都读到我应该使用 ConfigureAwait(false) 来避免死锁和出于性能原因。我们在我们的应用程序中使用 ConfigureAwait。但可能会删除 ConfigureAwaits,因为它会导致不同线程的执行上下文。

不同线程的执行上下文导致(有时)翻译问题。由于在不同的执行上下文中无法访问 currentculture 和 currentUICulture 中的集合文化。

我已经用下面的代码对其进行了一些测试。它没有任何性能差异。我知道这不是一个好的测试,因为这个简单的测试没有使用很多线程。

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 真的是个坏主意吗?

最佳答案

不要为了性能而盲目使用ConfigureAwait。在编写代码(通常是库代码)时使用它,在相同线程/同步上下文上恢复并不重要。如果在正确的线程/同步上下文上恢复确实很重要,ConfigureAwait(false) 将破坏您的代码,那么它可能有多快都无关紧要。

关于c# - ConfigureAwait(false) 性能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44408504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com