Dan*_*Tao 8 c# multithreading idisposable shutdown waithandle
是否有一种标准方法可以"干净地"关闭应用程序,而某些WaitHandle对象可能处于当前阻塞调用的状态WaitOne?
例如,可能有一个后台线程在这样的方法中旋转:
while (_request.WaitOne())
{
try
{
_workItem.Invoke();
}
finally
{
OnWorkCompleted();
}
}
Run Code Online (Sandbox Code Playgroud)
我没有看到没有明显的方法来处理这个线程而没有调用Thread.Abort(根据我的理解,这是不鼓励的).调用Close了对_request对象(AutoResetEvent),但是,会抛出异常.
目前,运行此循环的线程已将其IsBackground属性设置为true,因此应用程序似乎正常关闭.但是,自从WaitHandle实现以来IDisposable,我不确定这是否被认为是犹太洁食,或者是否应该在应用程序退出之前处理该对象.
这是一个糟糕的设计吗?如果没有,通常如何处理这种情况?
定义一个额外的WaitHandle被调用_terminate,它将发出一个请求来终止循环,然后使用WaitHandle.WaitAny而不是WaitHandle.WaitOne.
var handles = { _request, _terminate };
while (WaitHandle.WaitAny(handles) == 0)
{
try
{
_workItem.Invoke();
}
finally
{
OnCompleteWork();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1832 次 |
| 最近记录: |