我有以下代码,目的是等待所有给定的等待句柄,但可以通过特定的等待句柄取消:
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;
}
这仅适用于手动重置事件。当使用自动重置事件时,WaitAny会重置所有已发出的事件,但仅返回第一个已发出的事件(根据MSDN文档)。
有没有什么好的方法可以在不轮询的情况下以正确的方式使用自动重置事件来完成此操作?