我怎么能停止或杀死Parallel.Invoke()中的一些方法在C#.NET中

时间:2013-12-04 16:08:11

标签: c# c#-5.0

我正在实现线程概念,因为我们需要同时调用多个方法,因此我们使用了

Parallel.Invoke(
    () => { GetLink(words); },
    () => { GetSA(words); },
    () => { Getlp(words); });

此案例1工作正常,但。在情况2中我们需要调用三个方法,我需要找到哪个方法首先执行,并且它在第一个方法中有结果,而另外两个方法需要终止或停止执行。适用于所有3方法。

1 个答案:

答案 0 :(得分:1)

首先,请阅读此现有答案:C# Thread Termination and Thread.Abort()

其次,请阅读另一篇:What's wrong with using Thread.Abort()

一般建议是“永不杀死或中止线程”。这有多种原因,但最好是在网上阅读详细的解释,而不是每次都在这里重新发布。

而不是中止/终止,修改您的代码,以便子任务可以优雅地停止。

您可以拥有共享的CancellationToken(请参阅CancellationTokenSource类),并在每个线程的循环中定期检查其状态 - 或者在'WaitAny'方法中使用它。 所有线程都会在完成时设置此令牌,因此第一个完成将向其他人发送信号以停止。

如果您没有时间或意愿实现正常停止,显式创建和运行Threads,则Parallel和Tasks旨在提供更安全的编程风格。

在Thread上,你可以调用Abort方法,它将在Thread内部抛出ThreadAbortException。