Вызывает ли проблема отключение компьютера изнутри SemaphoreSlim? - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь создать логику следующего содержания:

  • выполните IO действие и получите результат
  • если результат (строка) равен "shutdown", то выключить компьютер
  • еще установить общую переменную (переменная должна быть поточно-безопасной)

Мой вопрос: есть ли что-то плохое в выключении компьютера из SemaphoreSlim?

Я мог бы сделать проверку и установить общую переменную в блокировке, а затем снова выполнить проверку (вне блокировки) и выключить компьютер, но я не хочу повторять то же условие.

int someSharedVariable;

await @lock.WaitAsync();

try {
    await someService.SendMessageAsync("query");
    var received = await userService.ReceiveMessageAsync<string>();

    if(received=="shutdown") {
        //SHUTDOWN computer
    }
    else {
        someSharedVariable=3;
    }
} finally {
    @lock.Release();
}

1 Ответ

1 голос
/ 19 июня 2019

Что-то не так в выключении компьютера из SemaphoreSlim?

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

Завершение работы компьютера завершит все процессы.Завершение процесса закроет все дескрипторы, удерживаемые этим процессом.Таким образом, сам факт, что ручка открыта, не вызовет никаких проблем;ОС очищает все дескрипторы процесса, закрывая их.

Однако, если ваше приложение может записывать в файл во время выключения, то есть повод для беспокойства.Операционная система выполнит постепенное завершение - запросит завершение работы каждого процесса, а затем немного подождет, пока он выполнит очистку.Но если ваше приложение знает, что оно собирается завершить работу, вы можете выполнить очистку до запуска выключения.Таким образом, нет никакой возможности, что ваше приложение решит, что оно должно записать какой-то огромный объем данных, как только начинается выключение, и у него нет времени на его завершение.

Итак, чтобы ответить на ваш конкретный вопрос, нетнет ничего плохого в том, чтобы выключить компьютер, удерживая SemaphoreSlim (или любой другой замок).

...