在C#中,是否可以立即退出正在进行的Parallel.For循环。在调用loopState.Stop()之后,以下代码可能需要一整秒钟的时间才能退出循环。
static void Main(string[] args)
{
Stopwatch watch = new Stopwatch();
Parallel.For(0, 50, (i, loopState) =>
{
Console.WriteLine("Thread:" + Thread.CurrentThread.ManagedThreadId + "\tIteration:" + i);
Thread.Sleep(1000);
if (i == 0)
{
watch.Start();
loopState.Stop();
return;
}
});
Console.WriteLine("Time Elapsed since loopState.Stop(): {0}s", watch.Elapsed.TotalSeconds);
Console.ReadKey();
}
输出
Thread:10 Iteration:0
Thread:6 Iteration:12
Thread:11 Iteration:24
Thread:12 Iteration:36
Thread:13 Iteration:48
Thread:13 Iteration:49
Thread:12 Iteration:37
Time Elapsed since loopState.Stop(): 0.9999363s
有什么办法可以更快地做到这一点?
谢谢!
最佳答案
是的,这可能。请参阅this文章,该文章详细介绍了并行编程问题。这是您摘录的摘录:
public double SumRootN(int root)
{
double result = 0;
for (int i = 1; i < 10000000; i++)
{
tokenSource.Token.ThrowIfCancellationRequested();
result += Math.Exp(Math.Log(i) / root);
}
return result;
}
使用传统的
Stop
或Break
不会导致您立即遇到任务被取消的情况。根据MSDN上this的文章,因此,您不能使用传统方法强制其立即停止。您将需要使用开头提到的方法。
希望这对您有所帮助!
关于c# - 立即退出C#中的Parallel.For循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14720014/