C# (Xamarin) WaitHandle.WaitAny, возвращающий Int32.MaxValue (0x7FFF FFFF)

В документации к методу WaitHandle.WaitAny (WaitHandle[], Int32) говорится, что он возвращает "Индекс массива объекта, который удовлетворил ожидание, или WaitTimeout, если ни один объект не удовлетворил ожидание, и прошел интервал времени, эквивалентный millisecondsTimeout", и в Браузер сборки Я вижу, что WaitHandle.WaitTimeout равен 258.

Так почему я иногда получаю 0x7fffffff (Int32.MaxValue) в качестве возвращаемого значения из этой функции?

Это известная ошибка в WaitAny() или просто строка, отсутствующая в документации?

ДОБАВЛЕНО ПОЗЖЕ:

Кстати, ошибка происходит пару раз, а затем исчезает, и я ничего не делаю, чтобы "исправить" ручки или что-то в этом роде.

Документация Microsoft

Xamarin Документация

Код:

class CommandQueue
{
    EventWaitHandle m_abortRequest = new EventWaitHandle (false, EventResetMode.AutoReset);
    Semaphore m_commandCount = new Semaphore (0, 10000);

    public CommandQueue ()
    {
        m_processTask = new Task(() => Process ());
        m_processTask.Start ();
    }

    public async Task Process()
    {
        WaitHandle [] handles = new WaitHandle [2];
        handles [0] = m_abortRequest;
        handles [1] = m_commandCount;

        for (;;)
        {
            int wait = WaitHandle.WaitAny (handles, 500);
            if (wait == WaitHandle.WaitTimeout)
            {
                OnIdleTimer ();
            }
            else if (wait == 0)
            {
                // SNIP: Code to handle a request to abort the processing of commands  
                break;
            }
            else if (wait == 1)
            {
                // SNIP: Code to process the next command in the queue
                await Process(nextCommand);
            }
            else
            {
                Debug.WriteLine ("*** Unexpected WaitAny(" + wait + " = 0x" + wait.ToString("X6") + ")!");
            }
        }
    }
}

0 ответов

Другие вопросы по тегам