首页 > 解决方案 > 从 SemaphoreSlim 中关闭计算机是否会带来麻烦?

问题描述

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

我的问题:从内部关闭计算机有什么问题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();
}

标签: .netlockingsemaphoreshutdown

解决方案


从 SemaphoreSlim 中关闭计算机有什么问题吗?

我的服务使用了一些 IO 句柄,我认为在关闭它们时,如果处理不当,它们可能会损坏磁盘上的数据或其他东西。

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

但是,如果您的应用程序在关机期间可能正在写入文件,那么就需要担心了。操作系统将优雅地关闭 - 请求每个进程退出,然后等待一段时间让它们进行清理。但是,如果您的应用程序知道它将关闭,您可能需要在开始关闭之前进行清理。这样,您的应用程序就不可能在关机开始时决定它需要写出大量数据,并且没有时间完成。

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


推荐阅读