队列或等待列表中的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
,它具有内置限制支持。