如何停止或终止C#NET中Parallel.Invoke()中的某些方法

如何停止或终止C#NET中Parallel.Invoke()中的某些方法,c#,c#-5.0,C#,C# 5.0,我正在实现线程概念,因为我们需要同时调用多个方法,所以对于我们使用的 Parallel.Invoke( () => { GetLink(words); }, () => { GetSA(words); }, () => { Getlp(words); }); 这个案例1运行良好,但是。在案例2中,我们需要调用三个方法,我需要找到哪个方法首先执行,它在第一个方法中有结果,其他两个方法需要终止或停止执行。它适用于所有3个方法。首先,阅读现有答案: 第二,读

我正在实现线程概念,因为我们需要同时调用多个方法,所以对于我们使用的

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

这个案例1运行良好,但是。在案例2中,我们需要调用三个方法,我需要找到哪个方法首先执行,它在第一个方法中有结果,其他两个方法需要终止或停止执行。它适用于所有3个方法。

首先,阅读现有答案:

第二,读另一本:

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

修改代码,使子任务能够正常停止,而不是中止/终止

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

如果您没有时间或意愿显式地实现优雅的停止、创建和运行线程,那么并行和任务是为更安全的编程风格而设计的


在线程上,您可以调用Abort方法,该方法将在线程内抛出ThreadAbortException。

如果一个方法需要另一个方法的结果,那么这一方法的并行性可能不适合您。在StackOverflow和web上已经有很多关于此特定问题的信息。不需要再问一个重复的问题。