c# – 如何限制多个异步任务?
发布时间:2020-12-15 20:04:01 所属栏目:百科 来源:网络整理
导读:我有一些以下形式的代码: static async Task DoSomething(int n) { ...}static void RunThreads(int totalThreads,int throttle) { var tasks = new ListTask(); for (var n = 0; n totalThreads; n++) { var task = DoSomething(n); tasks.Add(task); } Ta
我有一些以下形式的代码:
static async Task DoSomething(int n) { ... } static void RunThreads(int totalThreads,int throttle) { var tasks = new List<Task>(); for (var n = 0; n < totalThreads; n++) { var task = DoSomething(n); tasks.Add(task); } Task.WhenAll(tasks).Wait(); // all threads must complete } 麻烦的是,如果我没有限制线程,事情就会开始崩溃.现在,我想启动最多的节流线程,并且只在旧线程完成时启动新线程.我尝试过几种方法,迄今为止没有一种方法可行.我遇到的问题包括: >任务集合必须完全填充所有任务,无论是活动还是等待执行,否则最终的.Wait()调用只会查看它开始的线程. 这该怎么做? 解决方法
微软的Reactive Extensions(Rx) – NuGet“Rx-Main” – 这个问题排序非常好.
这样做: static void RunThreads(int totalThreads,int throttle) { Observable .Range(0,totalThreads) .Select(n => Observable.FromAsync(() => DoSomething(n))) .Merge(throttle) .Wait(); } 任务完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |