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 шт):

Автор решения: Aziz Umarov

Как вариант. Почитайте про очереди. Вам нужно обрабатывать файлы по очереди. Если фронт высылает вам файлы одновременно. То получив файлы помещяйте их в очередь и обрабатывайте уже по очереди отдельным потоком. А потоук выславший вам файл пусть пришлет его но вы не должны его обрабатывать в потоке получивший его

→ Ссылка