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

时间:2018-05-19 10:18:18

标签: c# .net multithreading asynchronous task-parallel-library

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

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

1 - 我正在尝试使用task而不是thread&线程池。
2 - 应该有最多n个并行运行的线程
3 - 当我尝试使用'SemaphoreSlim'时,我发现它多次调用相同的线程调用方法并遇到无法处理的异常。

实施:

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

如何使用任务通过并发线程使用任务调用DoSomeWork以及如何对其进行错误处理?

1 个答案:

答案 0 :(得分:1)

Parallel.For已经为您提供了进行此类任务的必要编组。

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

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