c# - 如何在c#中使用任务并行调用相同的方法n次运行?

How to call same method n times using tasks to run in parallel in c#?

我想从不同线程调用执行耗时工作的方法。

Public void DoSomeWork(int n)
{
  // Time Consuming operation depending on n. 
}

1 - 我正在尝试使用任务而不是线程和线程池。
2 - 最多应该有 n 个并行线程 运行ning
3 - 当我尝试使用 'SemaphoreSlim' 时,我发现它多次调用相同的线程调用方法并且 运行 进入未处理的异常。

实施:

 for (int i = 0; i < SomeNumberList.Count; i++)
        {
            semaphore.Wait();
            Task.Factory.StartNew(() => DoSomeWork(SomeNumberList[i])).ContinueWith(x => semaphore.Release());
        }

如何使用task并发线程调用DoSomeWork,如何处理错误?

Parallel.For 已经为您提供了此类任务所需的编组。

    const int n = 5; // No more than "n threads"
    Parallel.For(0,  SomeNumberList.Count, new ParallelOptions{MaxDegreeOfParallelism = n}, i =>
    {
        DoSomeWork(i);
    }

如果您需要根据并发执行中发生的情况处理异常或中断调用,还有另一个重载可以为您提供 ParallelLoopState。