从多个工作线程引发事件
本文关键字:事件 线程 工作 | 更新日期: 2023-09-27 18:06:35
使用c#创建一个windows服务应用程序。我有一个主对象,它创建工作线程来定期执行各种任务。每个工人完成一个特定的任务,等待一段时间,然后重复。
如果其中一个任务失败了,我希望该线程提醒主线程记录任务失败,然后退出。
我曾考虑过使用ManualResetEvent,其中Set将从每个worker调用(并且main将在检查它时循环)。问题是,多个工作线程可能同时失败,并同时尝试Set()事件。
是否有一种线程安全的方法来处理来自多个工作线程的警报?只需要一个警报,我只需要处理收到的第一个警报。
为什么不在Setter/Event处理程序中使用双重检查锁定?
private static readonly object Locker = new object();
private bool _closing = false;
private void YourErrorHandler(object sender, EventArgs args)
{
if(!_closing)
lock (Locker)
if(!_closing)
{
_closing = true;
//What ever you need to do here
}
}
如果你需要跨进程同步,你将需要使用互斥锁或其他东西。希望你们能理解
一旦其中一个线程失败,您想要关闭整个线程,对吗?一旦发生这种情况,当您连接所有线程时,您可以检查它们的状态,并为每个失败的线程报告一个错误。比如:
while(eventNotSet) sleep();
foreach(thread)
{
thread.Join();
checkStatus(thread);
}