Путь. GetTempFileName в MultiProcessing

мы выполняем несколько экземпляров нашей программы (c#) на одиночном компьютере. В каждом экземпляре наш код пытается создать "много" временные файлы со справкой Пути метода. GetTempFile (). И иногда, наша программа перестала работать за исключением:

Exception: Access to the path is denied.
StackTrace:    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.Path.GetTempFileName()

Я проверил временную папку и не нашел что-то странным: свободный диск достаточно, количество временных файлов не является очень большим и т.д.

У меня есть только одно объяснение: один экземпляр получает временный файл и открывает его, но в то же время, другой экземпляр также получает название временного файла и пытается открыть его. Если это корректно? Если да, как решить проблему, если не, как понять что проблема?

UPD: отказавший на компьютере с Windows Server 2008 HPC

Спасибо, Igor.

9
задан constructor 15 July 2010 в 13:21
поделиться

2 ответа

4
ответ дан 4 December 2019 в 21:07
поделиться

msdn утверждает для класса Path:

Любые публичные статические (Shared в Visual Basic) члены этого типа потокобезопасны.

Кроме того, для исключений IO указаны две причины:

  1. Метод GetTempFileName вызовет исключение IOException, если он используется для создания более 65535 файлов без удаления предыдущих временных файлов.

  2. Метод GetTempFileName вызовет исключение IOException, если отсутствует уникальное имя временного файла. Чтобы устранить эту ошибку, удалите все ненужные временные файлы.

Я бы рекомендовал проверить это условия (поскольку вы явно заявляете, что создаете много временных файлов).

6
ответ дан 4 December 2019 в 21:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: