如何避免在使用 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 请求。

如何避免在使用 Web API 请求时重复写入同一 json 文件

您可以专门打开它:如何锁定文件

您可以在用于打开文件的手柄上放置一个锁。

lock(File.OpenRead(myFileName))
{
  //do file operations
}