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