如何避免在使用 Web API 请求时重复写入同一 json 文件
本文关键字:文件 json 何避免 Web 请求 API | 更新日期: 2023-09-27 17:56:22
我有一个将由Web api服务访问的json文件。我想确保没有两个或多个 Web 请求会同时尝试写入文件。
下面的代码是我的 webapi 控制器代码。基本上,当它收到请求时,它将读取现有的 json 文件并将其反序列化,并将新项添加到列表中并将其写回 json 文件。我相信阅读部分适合同时阅读。因为我再次将整个列表写入文件,所以我想知道当 2 个进程尝试同时写入时会发生什么。如何在文件或其他东西上设置锁,以便一个进程等待写入 json 文件,然后在锁定消失后,另一个进程恢复写入?
using (StreamReader r = new StreamReader(File.OpenRead(myfilename)))
{
string jsonData = r.ReadToEnd();
someList = JsonConvert.DeserializeObject<List<MyData>>(jsonData);
}
someList.Add(newItem);
using (var sw = new StreamWriter(myfilename))
{
using (JsonWriter jw = new JsonTextWriter(sw))
{
jw.Formatting = Formatting.Indented;
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(jw, someList);
}
}
顺便说一句:只有一种类型的 Web API 代码将写入此文件。但是,将向同一 Web API 发出多个 Web 请求。
您可以专门打开它:如何锁定文件
您可以在用于打开文件的手柄上放置一个锁。
lock(File.OpenRead(myFileName))
{
//do file operations
}