【发布时间】:2016-05-03 14:20:01
【问题描述】:
我想知道如果要完成的任务数量很大,我们是否应该限制异步任务。假设您有 1000 个 URL,您是否一次触发所有请求并等待所有请求:
var tasks = urlList.Select(url => downloadAsync(url));
await Task.WhenAll(tasks);
或者你是否批量处理请求并一个接一个地处理:
foreach (var urlBatch in urlList.BatchEnumerable(BatchSize)){
var tasks = urlBatch.Select(url => downloadAsync(url));
await Task.WhenAll(tasks);
}
我认为批处理不是必需的,因为第一种方法(一次触发所有请求)将创建由ThreadPool 调度的任务,所以我们应该让ThreadPool 决定何时执行每个任务。但是,有人告诉我,实际上只有在任务是计算任务时才有效。当任务涉及网络请求时,第一种方法可能导致主机挂起???这是为什么呢?
【问题讨论】:
标签: c# .net asynchronous async-await throttling