我刚刚开始研究.NET4.0中新的"System.Threading.Tasks"的优点,我想知道是否有任何内置的支持来限制一次运行的并发任务的数量,或者是否应该手动处理这一点.

例如:如果我需要调用一个计算方法100次,有没有办法设置100个任务,但同时只执行5个任务?答案可能只是创建5个任务,调用Task.WaitAny,并在前一个任务完成时创建一个新任务.我只想确认一下,如果有更好的办法,我不会错过什么把戏.

基本上,有没有一种内置的方法可以做到这一点:

Dim taskArray() = {New Task(Function() DoComputation1()),
                   New Task(Function() DoComputation2()),
                   ...
                   New Task(Function() DoComputation100())}

Dim maxConcurrentThreads As Integer = 5
RunAllTasks(taskArray, maxConcurrentThreads)

谢谢你的帮助.

推荐答案

我知道这已经快一年了,但我已经找到了一种更简单的方法来实现这一点,所以我想我应该分享一下:

Dim actionsArray() As Action = 
     new Action(){
         New Action(Sub() DoComputation1()),
         New Action(Sub() DoComputation2()),
         ...
         New Action(Sub() DoComputation100())
      }

System.Threading.Tasks.Parallel.Invoke(New Tasks.ParallelOptions() With {.MaxDegreeOfParallelism = 5}, actionsArray)

瞧啊!

Asp.net相关问答推荐

域名 + 子域名在IIS部署

如何将标头中的用户名/密码传递给 SOAP WCF 服务

我可以将图像添加到 ASP.NET 按钮吗?

如何在 Javascript 中获取 C# 枚举

系统日期时间?与 System.DateTime

我可以根据角色隐藏/显示 asp:Menu 项吗?

如何判断 IIS 是处于 32 位还是 64 位模式

无法加载文件或程序集 'System.Web.Mvc,版本 = 3.0.0.0,Elmah.MVC 问题

配置转换和TransformXml 任务失败错误消息

stream.CopyTo - 文件为空.网

如何将 css 类添加到 ASP.Net 中的更新面板?

如何在 ASP.NET 下拉列表中添加选项组?

如何从后面的 ASP.NET 代码访问 HTML 表单输入

如何获取当前登录用户的角色列表

要调用此方法,Membership.Provider属性必须是ExtendedMembershipProvider的实例

使用 .NET 连接到 AS400

路由模板分隔符/不能连续出现 - 属性路由问题

ASP.NET MVC NonAction 含义

System.Linq.IQueryable 不包含Where的定义

将对象传递给 HTML 属性