我有下面的代码,有目标,以等待所有给定的等待句柄,而是由特定的等待句柄撤销:C#的WaitHandle取消了WaitAll
public static bool CancelableWaitAll(WaitHandle[] waitHandles, WaitHandle cancelWaitHandle)
{
var waitHandleList = new List<WaitHandle>();
waitHandleList.Add(cancelWaitHandle);
waitHandleList.AddRange(waitHandles);
int handleIdx;
do
{
handleIdx = WaitHandle.WaitAny(waitHandleList.ToArray());
waitHandleList.RemoveAt(handleIdx);
}
while (waitHandleList.Count > 1 && handleIdx != 0);
return handleIdx != 0;
}
这仅适用于ManualReset事件。使用AutoReset事件时,WaitAny会重置所有发送信号的事件,但仅返回第一个发送信号的事件(根据MSDN)。
任何想法如何使用AutoReset事件以正确的方式完成此操作而无需轮询?
尝试使用其中一种重载方法。并尝试在进入do-while之前创建该阵列,也许你会获得新的见解。 – 2013-02-25 14:45:14
我无法理解,如果取消事件发生,这将如何工作? – LukeHennerley 2013-02-25 14:46:22
如果取消事件发生,等待所有给定的waitHandles被取消 – Harry13 2013-02-25 14:51:36