Я пытаюсь синхронизировать webapi, который будет служить изображениям. Когда я запрашиваю конкретное изображение, он проверяет, существует ли изображение уже и возвращает ли оно его, или если оно не существует, оно создаст его, а затем вернет его..net. Синхронизация доступа к файлам
Моя проблема в том, что это явно не потокобезопасно; У меня есть один поток, и определение образа не существует и начинает его создавать, в то время как другой запрос приходит, а также определяет, что изображение не существует (пока) и пытается его создать. Я знаю, что я мог бы заблокировать все это, чтобы избежать проблемы, но я стараюсь избегать этого. Будет 100 000 изображений, и я не понимаю, почему мне нужно остановить все потоки от чтения других изображений только потому, что одно изображение еще не существует. Есть ли «обычный» способ сделать это? Изображения запрашиваются идентификаторами, можно ли заблокировать идентификатор определенного изображения? Например,
List<long> _locks = new List<long>();
_locks.Add(17);
lock(_locks[0]){...}
Это просто не выглядит правильным ... конечно, есть лучшее решение?
Что вы можете сделать, на вашем 'Read' добавьте 3 повторных цикла, за 2 секунды. Итак, если вы получаете «Исключение доступа к файлу», предположительно, когда файл написан, просто подождите и попробуйте снова прочитать. –
@ T.S. спасибо, я подумал об этом, и это «резервное» решение, я думаю, но я хотел бы попытаться избежать исключения в первую очередь, если смогу. Я не много сделал с точки зрения многопоточности, поэтому просто пытаюсь выяснить, как это сделать правильно, я думаю. Пробовал блокировать всю секцию на одном (статическом) объекте, а среднее время отклика от 20 мс до 200 мс ... !! – Andy