i have an async Task like this:
public async Task DoWork()
{
}
And i have at the moment a:
List<Task> tmp = new List<Task>();
where i add the tasks.
I start the tasks like this:
foreach (Task t in tmp)
{
await t;
}
Now my Question:
What`s the best way to start the tasks and only run 3 of them, at the same time (until the others are waiting)?
I think i need something like a queue/waiting list?
It should also be possible to add more tasks after the queue is started.
I`am using .NET 4.5.
Thank you for any suggestion
Actually, the tasks start as soon as you call DoWork
; when you await
them, you are finishing the tasks.
One option for throttling tasks is SemaphoreSlim
, which you can use as such:
private SemaphoreSlim _mutex = new SemaphoreSlim(3);
public async Task DoWorkAsync()
{
await _mutex.WaitAsync();
try
{
...
}
finally
{
_mutex.Release();
}
}
Another option is to use an actual queue, like an ActionBlock<T>
, which has built-in throttling support.