public static bool SignalAndWait(WaitHandle toSignal, WaitHandle toWaitOn, int millisecondsTimeout, bool exitContext) { if (toSignal == null) { throw new ArgumentNullException("toSignal"); } if (toWaitOn == null) { throw new ArgumentNullException("toWaitOn"); } if (-1 > millisecondsTimeout) { throw new ArgumentOutOfRangeException("millisecondsTimeout", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1")); } int num = WaitHandle.SignalAndWaitOne(toSignal.safeWaitHandle, toWaitOn.safeWaitHandle, millisecondsTimeout, toWaitOn.hasThreadAffinity, exitContext); if (int.MaxValue != num && toSignal.hasThreadAffinity) { Thread.EndCriticalRegion(); Thread.EndThreadAffinity(); } if (128 == num) { WaitHandle.ThrowAbandonedMutexException(); } if (298 == num) { throw new InvalidOperationException(Environment.GetResourceString("Threading.WaitHandleTooManyPosts")); } return(num == 0); }
public static int WaitAny(WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext) { if (waitHandles == null) { throw new ArgumentNullException(Environment.GetResourceString("ArgumentNull_Waithandles")); } if (waitHandles.Length == 0) { throw new ArgumentException(Environment.GetResourceString("Argument_EmptyWaithandleArray")); } if (64 < waitHandles.Length) { throw new NotSupportedException(Environment.GetResourceString("NotSupported_MaxWaitHandles")); } if (-1 > millisecondsTimeout) { throw new ArgumentOutOfRangeException("millisecondsTimeout", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1")); } WaitHandle[] waitHandles1 = new WaitHandle[waitHandles.Length]; for (int index = 0; index < waitHandles.Length; ++index) { WaitHandle waitHandle = waitHandles[index]; if (waitHandle == null) { throw new ArgumentNullException(Environment.GetResourceString("ArgumentNull_ArrayElement")); } if (RemotingServices.IsTransparentProxy((object)waitHandle)) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_WaitOnTransparentProxy")); } waitHandles1[index] = waitHandle; } int num = WaitHandle.WaitMultiple(waitHandles1, millisecondsTimeout, exitContext, false); if (AppDomainPauseManager.IsPaused) { AppDomainPauseManager.ResumeEvent.WaitOneWithoutFAS(); } if (128 <= num && 128 + waitHandles1.Length > num) { int location = num - 128; if (0 <= location && location < waitHandles1.Length) { WaitHandle.ThrowAbandonedMutexException(location, waitHandles1[location]); } else { WaitHandle.ThrowAbandonedMutexException(); } } GC.KeepAlive((object)waitHandles1); return(num); }
internal bool WaitOneWithoutFAS() { if (this.safeWaitHandle == null) { throw new ObjectDisposedException((string)null, Environment.GetResourceString("ObjectDisposed_Generic")); } int num1 = WaitHandle.WaitOneNative((SafeHandle)this.safeWaitHandle, uint.MaxValue, this.hasThreadAffinity, false); int num2 = 128; if (num1 == num2) { WaitHandle.ThrowAbandonedMutexException(); } int num3 = 258; return(num1 != num3); }
internal static bool InternalWaitOne(SafeHandle waitableSafeHandle, long millisecondsTimeout, bool hasThreadAffinity, bool exitContext) { if (waitableSafeHandle == null) { throw new ObjectDisposedException((string)null, Environment.GetResourceString("ObjectDisposed_Generic")); } int num1 = WaitHandle.WaitOneNative(waitableSafeHandle, (uint)millisecondsTimeout, hasThreadAffinity, exitContext); if (AppDomainPauseManager.IsPaused) { AppDomainPauseManager.ResumeEvent.WaitOneWithoutFAS(); } int num2 = 128; if (num1 == num2) { WaitHandle.ThrowAbandonedMutexException(); } int num3 = 258; return(num1 != num3); }