我有一个可以同时被多个用户使用的应用程序。该应用程序使用API,并且其令牌需要不时刷新。令牌保存在文件中。当需要刷新令牌时,文件将被新令牌覆盖。我担心的是,在极少数情况下,应用程序的两个实例可能会尝试在完全相同的时间写入文件。那会发生什么呢?我想避免出现一个空文件的情况。
我已经阅读了其他相关问题,并且看到“操作系统会安排它们”和“一切都会发生”。是哪一个?
如果有帮助,这里是有问题的5行。另外,这目前还没有在单独的线程上发生。
{
"ComputerLocalGroupsCurrent":[{"Groupname":"Access Control Assistance Operators", "LocalGroupId":11}]
}
答案 0 :(得分:1)
文件将具有最后一个编写者写入的内容。给作者FileShare.ReadWrite
允许多个作者使用它:
string newTokens = GetTokens();
using (StreamWriter writer = new StreamWriter("TokensFile.txt", FileMode.Create, FileAccess.Write, FileShare.Readwrite)) {
writer.Write(newTokens));
writer.Flush();
writer.Close();
}
答案 1 :(得分:0)
您只需要有一个关键部分,可确保一次只有一个应用程序实例访问文件。您可以使用Mutex来做到这一点,因为它们可以定义为机器范围的,因此可以在不同进程之间共享。
启动时,您的应用程序将创建/打开Mutex。然后,当您需要访问文件时,等待捕获互斥锁,先执行文件工作,然后释放互斥锁。如果您的应用程序崩溃,则操作系统会自动释放互斥量。因此,它既好又安全又易于使用。