Pum*_*per 8 c# throttling task-parallel-library async-await
我有一个像这样的异步任务:
public async Task DoWork()
{
}
Run Code Online (Sandbox Code Playgroud)
我现在有一个:
List<Task> tmp = new List<Task>();
Run Code Online (Sandbox Code Playgroud)
在哪里我添加任务.
我开始这样的任务:
foreach (Task t in tmp)
{
await t;
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题:
什么是启动任务的最佳方式,同时只运行其中3个(直到其他人等待)?
我想我需要像队列/等待名单一样的东西?
在队列启动后还应该可以添加更多任务.
我使用的是.NET 4.5.
谢谢你的任何建议
Ste*_*ary 19
实际上,一旦你打电话,任务就会开始DoWork ; 当你await他们,你正在完成任务.
限制任务的一个选项是SemaphoreSlim,您可以这样使用:
private SemaphoreSlim _mutex = new SemaphoreSlim(3);
public async Task DoWorkAsync()
{
await _mutex.WaitAsync();
try
{
...
}
finally
{
_mutex.Release();
}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用实际队列,例如ActionBlock<T>,具有内置限制支持.
| 归档时间: |
|
| 查看次数: |
7402 次 |
| 最近记录: |