当条件满足时优雅地中止线程
本文关键字:线程 条件 满足 | 更新日期: 2023-09-27 18:02:17
假设我启动了两个独立的(互斥的?)线程,最后有一个通知,通知一切都完成了。
这是一个优雅的方式来中止线程超出某些条件吗?我使用Framework 4.
谢谢。
Console.WriteLine(DateTime.Now);
DateTime StartNow = DateTime.Now;
Thread thread = new Thread(() => RunsLongTime());
thread.Start();
Thread thread1 = new Thread(() => RunsEvenLonger());
thread1.Start();
DateTime RightNow = DateTime.Now;
for (; ; )
{
if (RightNow >= StartNow.AddHours(1)) // A condition
{
thread.Abort();
thread1.Abort();
Console.WriteLine("ABORTED AT: " + DateTime.Now);
break;
}
RightNow = DateTime.Now;
}
显然,要做的是使用CancellationTokenSource
——它产生一个CancellationToken
,线程可以监视并响应它。
你可以在它构造的时候用超时值初始化它,或者你可以在线程退出的时候调用Cancel
。
ManualResetEvent
s),但是现在CancellationToken
已经被融入到许多api中,它是实现此功能的最佳(当前)方法。