ホームページ >バックエンド開発 >C++ >.NETでの非同期操作のSemaphoreslimがどのように並行性を制御できますか?

.NETでの非同期操作のSemaphoreslimがどのように並行性を制御できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-02-01 21:01:14454ブラウズ

How Can SemaphoreSlim Control Concurrency for Async Operations in .NET?

.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>
ブロックは許可がリリースされることを保証します。

ステートメントは、SemaphoreSlimWaitAsyncの適切な廃棄を保証します カスタムタスクスケジューラなどの代替アプローチが存在する一方で、finallyは、非同期の並行性を管理するための簡潔で効果的な方法を提供します。 MSDNドキュメントは、これらの代替手法の詳細を提供します。

以上が.NETでの非同期操作のSemaphoreslimがどのように並行性を制御できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。