WaitHandle
当某些对象可能处于当前阻塞调用的状态时,是否有一种标准方法可以“干净地”关闭应用程序WaitOne
?
例如,可能有一个后台线程以这样的方法旋转:
while (_request.WaitOne())
{
try
{
_workItem.Invoke();
}
finally
{
OnWorkCompleted();
}
}
我认为没有明显的方法可以在不调用的情况下处理这个线程Thread.Abort
(据我所知,这是不鼓励的)。Close
但是,调用_request
对象 (an AutoResetEvent
) 会引发异常。
目前,运行此循环的线程将其IsBackground
属性设置为true
,因此应用程序似乎正常关闭。但是,由于WaitHandle
implements IDisposable
,我不确定这是否被认为是犹太洁食,或者该对象是否真的应该在应用程序退出之前被处置。
这是一个糟糕的设计吗?如果不是,通常如何处理这种情况?