异步并行线程
本文关键字:线程 异步并行 | 更新日期: 2023-09-27 18:15:03
我想为集合中的所有对象异步并行运行一个函数。下面是当前的代码片段:
Parallel.ForEach(Objs,
new ParallelOptions { MaxDegreeOfParallelism = 10 },
item =>
{
DoSomething(someParameter, item);
});
如何实现这是与异步并行线程
我不清楚你所说的"异步并行"是什么意思,因为异步(使用更少的线程)是并行(使用更多线程)的对立面。
但是如果您的意思是要同时运行异步方法DoSomething
,那么可以通过Task.WhenAll
:
var tasks = Objs.Select(item => DoSomething(someParamter, item));
await Task.WhenAll(tasks);
如果您想限制并发程度(例如,限制到10
),那么您可以使用SemaphoreSlim
:
var semaphore = new SemaphoreSlim(10);
var tasks = Objs.Select(item =>
{
await semaphore.WaitAsync();
try { await DoSomething(someParameter, item); }
finally { semaphore.Release(); }
});
await Task.WhenAll(tasks);