我正在实现线程概念,因为我们需要同时调用多个方法,因此我们使用了
Parallel.Invoke(
() => { GetLink(words); },
() => { GetSA(words); },
() => { Getlp(words); });
此案例1工作正常,但。在情况2中我们需要调用三个方法,我需要找到哪个方法首先执行,并且它在第一个方法中有结果,而另外两个方法需要终止或停止执行。适用于所有3方法。
答案 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。