Вопрос

Согласно документации MSDN, установите () и reset () на ManualResetEvent (или любой eventWaithandle) возвращает булевую индикатор, независимо от того, была ли операция успешной.

При каких обстоятельствах это позвонить вернуть ложь, а что я должен делать, если это делает?

Это было полезно?

Решение

Я не был уверен, как ответить на это и смотреть на множество примеров MSDN, установленное возвращаемое значение игнорируется, поэтому он не должен быть важен или может произойти.

Но это было недостаточно хорошим. Я выпустил свой виртуальную машину, и я открыл отражатель, чтобы взглянуть на код. ManualResetEvent не установлен, но он наследует от EventWaithandle, который делает. Вот код:

public bool Set()
{
    bool flag = Win32Native.SetEvent(base.safeWaitHandle);
    if (!flag)
    {
        __Error.WinIOError();
    }
    return flag;
}

Где setevent импортируется из Kernel32:

[DllImport("kernel32.dll", SetLastError=true)]
internal static extern bool SetEvent(SafeWaitHandle handle);

Вызов WinioioError () только что звонит getlastwin32Error, на котором мы не заботимся о. В основном это означает для вызова, чтобы вернуть ложное, что-то довольно не так, должно было произойти в родном коде Win32.

Смесив эту информацию вместе с тем, что код, размещенный в официальной документации MSDN, игнорирует возвращаемое значение (почему нет? Что вы собираетесь делать, если я больше не удается?) Вы можете смело игнорировать его, если вы хотите очистить свою логику Бит или получите его и войдите, если вы особенно педантично.

Другие советы

Я не уверен, что просто ошибка журнала и продолжение выполнения будет зависеть. FALSE REVEST от SET () может принести неправильное поведение в потоках синхронозации, управляемые по желанию обработчиков. Это многопоточность ... Мое видение обращения с ложным набором () результатом - бросить исключение, которое, вероятно, в большинстве случаев может быть необработанным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top