从 SemaphoreSlim 中关闭计算机会带来麻烦吗?
Does computer shutdown from within SemaphoreSlim spell trouble?
我正在尝试创建以下逻辑:
- 执行
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();
}
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
(或任何其他锁)时关闭计算机并没有错。
我正在尝试创建以下逻辑:
- 执行
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();
}
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
(或任何其他锁)时关闭计算机并没有错。