小编Tua*_*yen的帖子

节流异步任务?

我想知道如果要完成的任务数量很大,我们是否应该限制异步任务.假设您有1000个URL,您是否一次触发所有请求并等待所有请求:

var tasks = urlList.Select(url => downloadAsync(url));
await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)

或者您批量处理请求并逐个处理:

foreach (var urlBatch in urlList.BatchEnumerable(BatchSize)){
    var tasks = urlBatch.Select(url => downloadAsync(url));
    await Task.WhenAll(tasks);
}
Run Code Online (Sandbox Code Playgroud)

我认为批处理是没有必要的,因为第一种方法(立即触发所有请求)将创建由其安排的任务ThreadPool,因此我们应该ThreadPool决定何时执行每项任务.但是,有人告诉我,实际上只有在任务是计算任务时才有效.当任务涉及网络请求时,第一种方法可能导致主机挂起??? 这是为什么 ?

.net c# asynchronous throttling async-await

4
推荐指数
1
解决办法
821
查看次数

标签 统计

.net ×1

async-await ×1

asynchronous ×1

c# ×1

throttling ×1