首頁 >後端開發 >C++ >不同的非同步/等待模式如何影響 C# 中的執行時間?

不同的非同步/等待模式如何影響 C# 中的執行時間?

Patricia Arquette
Patricia Arquette原創
2025-01-12 13:28:42444瀏覽

How Do Different Async/Await Patterns Impact Execution Time in C#?

C# 中不同的 Async/Await 模式如何影響執行時間?

非同步等待:等待與非等待(啟動後忽略)

程式碼詳解

考慮以下程式碼:

<code class="language-csharp">static async Task Callee()
{
    await Task.Delay(1000);
}

static async Task Caller()
{
    Callee(); // #1 启动后忽略
    await Callee(); // #2 >1s
    Task.Run(() => Callee()); // #3 启动后忽略
    await Task.Run(() => Callee()); // #4 >1s
    Task.Run(async () => await Callee()); // #5 启动后忽略
    await Task.Run(async () => await Callee()); // #6 >1s
}

static void Main(string[] args)
{
    var stopWatch = new Stopwatch();
    stopWatch.Start();
    Caller().Wait();
    stopWatch.Stop();
    Console.WriteLine($"Elapsed: {stopWatch.ElapsedMilliseconds}");
    Console.ReadKey();
}</code>

呼叫邏輯

#1: 最簡單的啟動後忽略方式。 #2: 簡單等待。 #3: 在執行緒池執行緒上啟動非同步方法並忽略結果。 #4: 在執行緒池執行緒上啟動非同步方法並非同步等待其完成。 #5: 與 #3 相同。 #6: 與 #4 相同。

Task.Run 與非同步 Lambda 表達式

雖然Task.Run 會啟動一個新線程,但Task.Run(async => ...) 等效於Task.Factory.StartNew(async => ...), 它會在線程池上創建一個新任務並立即啟動它。

啟動後忽略的注意事項

需要注意的是,啟動後忽略的方法可能會導致未處理的異常,從而導致應用程式崩潰。因此,在使用它們之前,請務必仔細考慮其影響。

以上是不同的非同步/等待模式如何影響 C# 中的執行時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn