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。
我想从不同线程调用执行耗时工作的方法。
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。