猿问

如何限制并发异步I / O操作的数量?

如何限制并发异步I / O操作的数量?

// let's say there is a list of 1000+ URLs

string[] urls = { "http://google.com", "http://yahoo.com", ... };


// now let's send HTTP requests to each of these URLs in parallel

urls.AsParallel().ForAll(async (url) => {

    var client = new HttpClient();

    var html = await client.GetStringAsync(url);

});

这是问题所在,它会同时启动1000多个Web请求。有没有一种简单的方法来限制这些异步http请求的并发数量?这样在任何给定时间都不会下载超过20个网页。如何以最有效的方式做到这一点?


扬帆大鱼
浏览 739回答 3
3回答

红糖糍粑

遗憾的是,.NET Framework缺少用于编排并行异步任务的最重要的组合器。内置没有这样的东西。查看由最受尊敬的Stephen Toub构建的AsyncSemaphore类。你想要的是一个信号量,你需要一个异步版本。
随时随地看视频慕课网APP
我要回答