我刚刚开始研究.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相关问答推荐

使用 aspnet core SignalR 客户端为 VSIX 项目.

为什么 @Html.EditorFor 和 @Html.PasswordFor 在 MVC 中创建不同的样式框?

Asp.Net Core 创建一个控制器来使用 SendGrid 发送邮箱

在正则表达式中允许 -(破折号)

我可以在 .net 核心中使用 Entity Framework 6(非核心)吗?

asp.net dropdownlist - 在 db 值之前添加空行

有没有一种简单的方法可以将对象属性转换为字典

如何以编程方式获取会话 cookie 名称?

在上下文中找不到 owin.Environment 项

如何在 ASP.NET 应用程序中使用 jQuery 捕获提交事件?

你如何确定哪个验证器失败了?

如何配置 ASP.NET Core 1.0 以使用本地 IIS 而不是 IIS Express?

如何在 ASP.NET 中仅在调试模式下执行代码

Eval()、XPath() 和 Bind() 等数据绑定方法只能在数据绑定控件的上下文中使用

如何将枚举类型绑定到 DropDownList?

IIS 会话超时与 ASP.NET 会话超时

对 ASP.NET 2.0 网页进行单元测试的最佳方法是什么?

将字典绑定到中继器

配置授权服务器端点

为什么 IFormFile 显示为空,我该如何解决?