异步并行线程

本文关键字:线程 异步并行 | 更新日期: 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);