gpt4 book ai didi

c# - c# - 如何在任何有异常的情况下向线程发出停止信号

转载 作者:行者123 更新时间:2023-11-30 14:31:42 25 4
gpt4 key购买 nike

假设有 5 个线程,T1、T2、T3、T4 和 T5,其中 5 个正在运行。我的要求是停止所有 4 个线程,以防 5 个线程中的任何一个有任何异常。这怎么能实现。我正在使用 C# 4.0

最佳答案

这可以通过使用 CancellationTokens 来实现。 CancellationTokenSource 可以在您的线程之间共享。

这里是一个 Tasks 的例子,但是你可以使用 Threads\ThreadPool

        CancellationTokenSource cts = new CancellationTokenSource();

Task.Factory.StartNew(() =>
{
while (1 == 1)
{
Thread.Sleep(1000);
Console.WriteLine("Thread1 in progress...");
if (cts.Token.IsCancellationRequested)
{
Console.WriteLine("Thread1 exiting...");
break;
}
}
}, cts.Token);

Task.Factory.StartNew(() =>
{
while (1 == 1)
{
Thread.Sleep(1000);
Console.WriteLine("Thread2 in progress...");
if (cts.Token.IsCancellationRequested)
{
Console.WriteLine("Thread2 exiting...");
break;
}
}
}, cts.Token);

Task.Factory.StartNew(() =>
{
while (1 == 1)
{
Thread.Sleep(1000);
Console.WriteLine("Thread3 in progress...");
if (cts.Token.IsCancellationRequested)
{
Console.WriteLine("Thread3 exiting...");
break;
}
}
}, cts.Token);

Task.Factory.StartNew(() =>
{

Thread.Sleep(5000);
try
{
Console.WriteLine("Thread5 in progress...");
int y = 0;
int x = 1 / y;
}
catch
{
Console.WriteLine("Thread5 requesting cancellation...");
cts.Cancel();
}
}, cts.Token);

并检查this链接有很多 CalcellationTokenSource 示例(包括共享的 CancellationCancellationTokenSources):

编辑:我可能应该提到,在请求计算时,您可以只调用 Token 的 ThrowIfCancellationRequested 方法,而不是“中断”循环。但是结果会有所不同——任务不会“运行到完成”,而是处于“已取消”状态。添加任务延续时需要考虑这一点。

关于c# - c# - 如何在任何有异常的情况下向线程发出停止信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19583629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com