从 SemaphoreSlim 中关闭计算机会带来麻烦吗?

Does computer shutdown from within SemaphoreSlim spell trouble?

我正在尝试创建以下逻辑:

我的问题:从 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();
}

is there anything wrong in shutting down the computer from within the SemaphoreSlim?

my service uses some IO handles and i supposed when closing them they can corrupt data on disk or something if not properly handled.

关闭计算机将结束所有进程。结束进程将关闭该进程持有的所有句柄。因此,句柄打开这一事实不会导致任何问题; OS 通过关闭它们来清理所有进程句柄。

但是,如果您的应用程序可以在 关闭期间 写入文件,则需要引起关注。 OS 将正常关闭 - 请求每个进程退出,然后稍等片刻让它们进行清理。但是,如果您的应用程序知道它将要关闭,您可能希望在开始关闭之前 进行清理。这样一来,您的应用就不可能在关机开始时决定它需要写出大量数据,而且它没有时间完成。

因此,为了回答您的具体问题,不,在持有 SemaphoreSlim(或任何其他锁)时关闭计算机并没有错。