首頁 >後端開發 >C++ >Semareslim在.NET中如何控制異步操作​​的並發性?

Semareslim在.NET中如何控制異步操作​​的並發性?

Linda Hamilton
Linda Hamilton原創
2025-02-01 21:01:14414瀏覽

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

在.net

中限制並發異步任務

>處理眾多並發異步操作需要仔細的管理以防止系統超負荷。 示例代碼同時啟動了1000多個Web請求,這是資源耗盡的潛在食譜。 .NET 4.5 beta中引入的類,提供了一種優雅的解決方案,用於控制與其

方法的並發。這允許有效的異步操作節流:

SemaphoreSlim 通過以20個計數初始化,我們最多可以同時提供20個請求。 WaitAsync停止執行,直到獲得許可證為止。 至關重要的是,即使發生例外,塊也可以保證釋放許可證。

的語句確保正確處理
<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>提供了一種簡潔有效的方法來管理異步並發。 MSDN文檔提供了有關這些替代技術的更多詳細信息。

以上是Semareslim在.NET中如何控制異步操作​​的並發性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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