Amib.Threading.Internal.WorkItem.WaitAny C# (CSharp) Метод

WaitAny() статический приватный Метод

Waits for any of the work items in the specified array to complete, cancel, or timeout
static private WaitAny ( IWaitableResult waitableResults, int millisecondsTimeout, bool exitContext, WaitHandle cancelWaitHandle ) : int
waitableResults IWaitableResult Array of work item result objects
millisecondsTimeout int The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely.
exitContext bool /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. ///
cancelWaitHandle System.Threading.WaitHandle A cancel wait handle to interrupt the wait if needed
Результат int
        internal static int WaitAny(
            IWaitableResult[] waitableResults,
            int millisecondsTimeout,
            bool exitContext,
            WaitHandle cancelWaitHandle)
        {
            WaitHandle[] waitHandles;

            if (null != cancelWaitHandle)
            {
                waitHandles = new WaitHandle[waitableResults.Length + 1];
                GetWaitHandles(waitableResults, waitHandles);
                waitHandles[waitableResults.Length] = cancelWaitHandle;
            }
            else
            {
                waitHandles = new WaitHandle[waitableResults.Length];
                GetWaitHandles(waitableResults, waitHandles);
            }

            int result = STPEventWaitHandle.WaitAny(waitHandles, millisecondsTimeout, exitContext);

            // Treat cancel as timeout
            if (null != cancelWaitHandle)
            {
                if (result == waitableResults.Length)
                {
                    result = STPEventWaitHandle.WaitTimeout;
                }
            }

            ReleaseWaitHandles(waitableResults);

            return result;
        }