spe*_*der 14
ManualResetEvent mre=new ManualResetEvent(false);
//......
var signalled=mre.WaitOne(TimeSpan.FromSeconds(8));
if(!signalled)
{
//timeout occurred
}
Run Code Online (Sandbox Code Playgroud)
其他地方(在8秒之前):
mre.Set(); //unfreezes paused Thread and causes signalled==true
Run Code Online (Sandbox Code Playgroud)
并允许未阻塞的线程正常终止.Thread.Abort是邪恶的,应该避免.
在线程处于睡眠状态时,您无法(安全地)中止线程.您应该在阻止完成后立即检查中止情况,然后退出该点.
无论如何,在大多数情况下确实没有这个缺点,因为线程在阻塞时将使用非常少的资源.
如果你必须尽快"中止",你可以使用不同的阻止机制.睡眠很少是正确的选择 - 等待句柄可能会提供相同的功能,并为另一个线程提供一种方法,表明它应该立即停止阻塞.
| 归档时间: |
|
| 查看次数: |
9169 次 |
| 最近记录: |