队列或等待列表中的C#异步任务

我有一个像这样的异步任务:

public async Task DoWork() { } 

我现在有一个:

 List tmp = new List(); 

我在哪里添加任务。

我开始这样的任务:

 foreach (Task t in tmp) { await t; } 

现在我的问题:

什么是启动任务的最佳方式,同时只运行其中3个(直到其他人在等待)?

我想我需要像队列/等待名单一样的东西?

在队列启动后还应该可以添加更多任务。

我使用的是.NET 4.5。

谢谢你的任何建议

实际上,一旦你打电话给DoWork ,任务就会开始 ; 当你await他们时,你正在完成任务。

限制任务的一个选项是SemaphoreSlim ,您可以这样使用:

 private SemaphoreSlim _mutex = new SemaphoreSlim(3); public async Task DoWorkAsync() { await _mutex.WaitAsync(); try { ... } finally { _mutex.Release(); } } 

另一种选择是使用实际队列,例如ActionBlock ,它具有内置限制支持。