我正在尝试创建以下逻辑:
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();
}
答案 0 :(得分:1)
从SemaphoreSlim内部关闭计算机是否有问题?
我的服务使用了一些IO句柄,我想在关闭它们时它们会破坏磁盘上的数据或如果处理不当。
关闭计算机将结束所有进程。结束进程将关闭该进程持有的所有句柄。因此,仅打开手柄这一事实就不会引起任何问题。操作系统通过关闭它们来清理所有进程句柄。
但是,如果您的应用程序可能在关机期间 写入文件,则值得关注。操作系统将正常关闭-请求退出每个进程,然后稍等片刻让它们进行清理。但是,如果您的应用知道即将关闭,则可能要在开始关闭之前 进行清理。这样一来,您的应用程序就不可能在关闭开始时就决定需要写出大量数据,而且没有时间完成。
因此,要回答您的特定问题,不,拿着SemaphoreSlim
(或任何其他锁)的同时关闭计算机没有任何问题。