Я не в .NET, но в любом случае это звучит как общая проблема, поэтому вот мои два цента.
Как вы сказали, многопоточность (как правило, разные запросы выполняются в разных потоках) решает большинство подобных проблем, так как каждый вызов метода включает новые объекты, запускаемые в отдельном контексте.
Однако есть исключения:
- Синглтон (глобальные) объекты, у которых любая из их операций имеет побочные эффекты
- Другие ресурсы (файлы и т. Д.), Это как раз ваш случай.
Так что в случае файлов, я бы обдумал эти (взаимоисключающие) альтернативы:
(1) Никогда не записывайте загруженный файл на диск, вместо этого держите его в памяти и обрабатывайте там (как в байтовом массиве). В этом случае вы используете защиту потока на запрос. Это нельзя применить, если ваши файлы действительно большие.
(2) Выберите очень рандомизированные имена (например, UUID), чтобы записать их во временную папку, чтобы их имена не конфликтовали, если два пользователя загружают одновременно.
Я бы пошел с (1), когда это возможно.
Лучший