Асинхронные задачи C# в очереди или списке ожидания
у меня есть асинхронная задача, как это:
public async Task DoWork()
{
}
и у меня есть на данный момент:
List<Task> tmp = new List<Task>();
где я добавляю задачи.
Я начинаю задачи следующим образом:
foreach (Task t in tmp)
{
await t;
}
Теперь мой вопрос:
каков наилучший способ запустить задачи и запустить только 3 из них, в то же время (пока другие не ждут)?
Я думаю, мне нужно что-то вроде очереди/списка ожидания?
также должно быть возможно добавить больше задач после запуска очереди.
Я использую .NET 4.5.
Спасибо за любое предложение
1 ответов
собственно, задачи старт как только вы называете DoWork
; когда вы await
, вы отделка задач.
один вариант для задач регулирования SemaphoreSlim
, который вы можете использовать так:
private SemaphoreSlim _mutex = new SemaphoreSlim(3);
public async Task DoWorkAsync()
{
await _mutex.WaitAsync();
try
{
...
}
finally
{
_mutex.Release();
}
}
другой вариант-использовать фактическую очередь, например ActionBlock<T>
, который имеет встроенную поддержку регулирования.