C# のさまざまな非同期/待機モードは実行時間にどのように影響しますか?
非同期待機: 待機中と非待機中 (起動後は無視されます)
コードの詳細説明
次のコードを考えてみましょう:
<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 中国語 Web サイトの他の関連記事を参照してください。