从SemaphoreSlim内部关闭计算机是否会引起麻烦?

时间:2019-06-19 07:45:44

标签: .net locking semaphore shutdown

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

  • 执行IO操作并接收结果
  • 如果结果(字符串)为"shutdown",则关闭计算机
  • 否则设置共享变量(变量必须是线程安全的)

我的问题:从SemaphoreSlim内部关闭计算机有什么问题吗?

我可以进行检查并在锁中设置共享变量,然后再次执行检查(在锁之外)并关闭PC,但我不想重复相同的条件。

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 个答案:

答案 0 :(得分:1)

  

从SemaphoreSlim内部关闭计算机是否有问题?

     

我的服务使用了一些IO句柄,我想在关闭它们时它们会破坏磁盘上的数据或如果处理不当。

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

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

因此,要回答您的特定问题,不,拿着SemaphoreSlim(或任何其他锁)的同时关闭计算机没有任何问题。