我有一个这样的异步任务:
public async Task DoWork()
{
}
我现在有:
List<Task> tmp = new List<Task>();
我在哪里添加任务。
我这样开始任务:
foreach (Task t in tmp)
{
await t;
}
现在我的问题:
启动任务并同时只运行其中 3 个任务的最佳方式是什么(直到其他任务正在等待)?
我想我需要排队/等候名单之类的东西?
应该也可以在队列启动后添加更多的任务。
我正在使用 .NET 4.5。
谢谢你的建议
最佳答案
实际上,一旦您调用 DoWork
,任务就会开始 ;当你await
他们,您正在完成任务。
throttle 任务的一个选项是 SemaphoreSlim
,您可以这样使用:
private SemaphoreSlim _mutex = new SemaphoreSlim(3);
public async Task DoWorkAsync()
{
await _mutex.WaitAsync();
try
{
...
}
finally
{
_mutex.Release();
}
}
另一种选择是使用实际队列,例如 ActionBlock<T>
,它具有内置的 throttle 支持。
关于队列或等待列表中的 C# 异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20904328/