使用Semaphoreslim
优化并发异步I/O
>大量异步HTTP请求要求仔细的并发管理以防止资源耗尽。 限制同时操作可确保有效执行。> Smaphoreslim:节流ASYNC操作
>
SemaphoreSlim.WaitAsync()
.net 4.5 beta's
>示例:节流http请求
>此代码限制并发http请求到20:
><code class="language-csharp">public async Task MyOuterMethod() { // URLs to fetch var urls = new[] { "http://google.com", "http://yahoo.com", /* ... */ }; // Semaphore for throttling var throttler = new SemaphoreSlim(20); // Tasks for each URL var allTasks = new List<Task>(); foreach (var url in urls) { await throttler.WaitAsync(); allTasks.Add(Task.Run(async () => { using (var client = new HttpClient()) { try { await client.GetStringAsync(url); } finally { throttler.Release(); } } })); } // Wait for all tasks to complete await Task.WhenAll(allTasks); }</code>
替代:自定义任务调度程序
> 或者,可以将任务并行库(TPL)与自定义任务调度程序一起使用以控制并发。 该调度程序将管理任务执行,执行并发限制。>
摘要 这些节流技术有效地管理并发异步I/O,防止系统超负荷并优化性能。
以上是信号量如何优化并发异步I/O操作?的详细内容。更多信息请关注PHP中文网其他相关文章!