C# 异步并行线程

C# 异步并行线程,c#,C#,我希望为集合中的所有对象异步并行运行函数。 下面是当前的代码片段 Parallel.ForEach(Objs, new ParallelOptions { MaxDegreeOfParallelism = 10 }, item => { DoSomething(someParameter, item); }); 使用异步并行线程如何实现这一点尚不

我希望为集合中的所有对象异步并行运行函数。 下面是当前的代码片段

Parallel.ForEach(Objs,
                new ParallelOptions { MaxDegreeOfParallelism = 10 },
                item =>
            {
                DoSomething(someParameter, item);
            });

使用异步并行线程如何实现这一点尚不清楚“异步并行”是什么意思,因为异步(使用更少的线程)与并行(使用更多的线程)有点相反

但是,如果您的意思是希望同时运行异步方法
DoSomething
,那么可以通过
Task来完成。whalll

var tasks = Objs.Select(item => DoSomething(someParamter, item));
await Task.WhenAll(tasks);
如果要限制并发程度(例如,限制为
10
),则可以使用
信号量lim

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);

检查这个:你能举一个你想要实现的例子吗?你想让
Parallel.ForEach
异步运行吗?@nvoigt是的,我想并行运行。ForEach run async.Parallel的方式已经是异步运行了。。。与使用
for(同步(一个接一个))
处理不同,
并行运行=>(异步(一个并行x其他))@类不提供异步方法,不。它并行工作,但它会在返回之前同步等待所有并行工作完成,这与并行工作的异步操作不同。异步并不意味着使用更少的线程。它只是意味着工作在不阻塞启动工作的线程的情况下完成。它是否使用线程来实现这一点无关紧要。同样,并行工作不需要使用多个线程。并行工作仅仅意味着同时执行多个生产任务。这可以通过多线程或其他方式来实现。这是同时工作的同义词。@Servy:我们必须同意不同意。我认为有必要区分并发性和并行性(或您选择使用的任何术语)。您可以将并发性或并行性与多线程(即编写使用多线程的代码)区分开来。仅仅是以完全不同于定义的方式使用词语,更糟糕的是,试图纠正人们根据他们公认的定义正确使用词语,而使用你的个人定义,而没有其他人分享,这是一个可怕的想法。如果您认为使用多线程的并行代码与不使用多线程的并行代码之间的区别比在描述这些进程时使用正确的术语更重要。@Servy:我使用的是正确的、普遍接受的术语定义。问题是,“并行”、“异步”等有多个定义,这取决于您与谁交谈。是否提供一个参考源,“并行”工作仅指使用多个线程完成的工作,而不是不使用多个线程而并行完成的工作?