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中文網其他相關文章!