【发布时间】:2010-06-21 19:11:14
【问题描述】:
当某些WaitHandle 对象可能处于对WaitOne 的当前阻塞调用状态时,是否有一种标准方法可以“干净地”关闭应用程序?
例如,可能有一个后台线程在这样的方法中旋转:
while (_request.WaitOne())
{
try
{
_workItem.Invoke();
}
finally
{
OnWorkCompleted();
}
}
如果不调用Thread.Abort,我看不出有明显的方法来处理这个线程(据我所知,这是不鼓励的)。但是,在 _request 对象(AutoResetEvent)上调用 Close 会引发异常。
目前,运行此循环的线程将其IsBackground 属性设置为true,因此应用程序似乎 可以正常关闭。但是,由于 WaitHandle 实现了 IDisposable,我不确定这是否被认为是 kosher,或者该对象是否真的应该在应用退出之前被处置。
这是一个糟糕的设计吗?如果不是,通常如何处理这种情况?
【问题讨论】:
标签: c# multithreading idisposable shutdown waithandle