假设我有两个独立的(互斥的?)线程,我会在最后发出通知,通知所有内容已完成。
这是一种优雅的方式来中止超出某些条件的线程吗?我使用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;
}
答案 0 :(得分:1)
嗯,显而易见的事情是使用CancellationTokenSource
- 它产生一个线程可以监视和响应的CancellationToken
。
您可以在构造时使用超时值对其进行初始化,也可以在线程退出时调用Cancel
。
有关此合作取消模式的详细信息,请参阅Cancellation in Managed Threads。唯一干净/优雅的工作方式是合作方式。在.NET 4之前,可以使用各种ad-hoc方法(例如ManualResetEvent
s),但现在CancellationToken
已经融入许多API,它是实现的最佳(当前)方式此