C#. ASP.NET. Как работать с файлом в многопотоке?
Есть API контроллер и метод для загрузки файлов
[HttpPost]
public ActionResult Save(IFormFile file)
{
try
{
var upload = new FileUpload(HostingEnvironment);
upload.Upload(file, folder);
}
catch(Exception e)
{
Response.StatusCode = 500;
}
return new EmptyResult();
}
И метод Upload внутри FileUpload :
using (FileStream fs = new FileStream(jsonPath, FileMode.OpenOrCreate))
{
string json = JsonConvert.SerializeObject(Files, Formatting.Indented);
byte[] array = System.Text.Encoding.Default.GetBytes(json);
fs.Write(array);
}
Храню объекты в разных папках, в каждой из папок есть json файл с путями к файлу в этой папке.
Проблема в том если загружается больше одного файла - то я не совсем понимаю как заблочить и дождаться доступ к файлу, пока предыдущий поток не закончит работу. Если глянуть под дебагом - то они обращаются одновременно к каждой из строчек кода. Пробовал блочить locker'ом, и тем что находил в интернете, но не особо помогало. Отправку файлов со стороны клиента я изменить не могу.
Было бы здорово узнать что можно еще попробовать сделать
Ответы (1 шт):
Как вариант. Почитайте про очереди. Вам нужно обрабатывать файлы по очереди. Если фронт высылает вам файлы одновременно. То получив файлы помещяйте их в очередь и обрабатывайте уже по очереди отдельным потоком. А потоук выславший вам файл пусть пришлет его но вы не должны его обрабатывать в потоке получивший его