.NET
の同時非同期タスクを制限します多くの同時非同期操作を処理するには、システムの過負荷を防ぐために慎重な管理が必要です。 サンプルコードは、1000を超えるWebリクエストを同時に開始します。リソースの使い果たしの潜在的なレシピ。 .NET 4.5ベータ版で導入された
クラスは、そのメソッドを使用して並行性を制御するためのエレガントなソリューションを提供します。これにより、効率的な非同期操作スロットリングが可能になります
SemaphoreSlim
WaitAsync
20のカウントで初期化することにより、最大20回の同時リクエストを確保します。
<code class="language-csharp">public async Task MyOuterMethod() { var semaphore = new SemaphoreSlim(20); // Maximum 20 concurrent requests var tasks = new List<Task>(); foreach (var url in urls) { await semaphore.WaitAsync(); // Acquire a permit tasks.Add(Task.Run(async () => { try { using (var client = new HttpClient()) // Use using statement for proper disposal { var html = await client.GetStringAsync(url); // Process the result } } finally { semaphore.Release(); // Release the permit } })); } await Task.WhenAll(tasks); // Wait for all tasks to complete }</code>ブロックは許可がリリースされることを保証します。
ステートメントは、SemaphoreSlim
。WaitAsync
の適切な廃棄を保証します
カスタムタスクスケジューラなどの代替アプローチが存在する一方で、finally
は、非同期の並行性を管理するための簡潔で効果的な方法を提供します。 MSDNドキュメントは、これらの代替手法の詳細を提供します。
以上が.NETでの非同期操作のSemaphoreslimがどのように並行性を制御できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。