/ / Path.GetTempFileName у MultiProcessing - c #, багатопроцесорне

Path.GetTempFileName у MultiProcessing - c #, багатопроцесорний

ми запускаємо кілька екземплярів нашої програми (c #) на aєдиний комп’ютер. У кожному випадку наш код намагається створити "багато" тимчасових файлів за допомогою методу Path.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

Дякую, Ігор.

Відповіді:

4 для відповіді № 1

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

Усі загальнодоступні статичні (спільно використовуються у Visual Basic) члени цього типу є потокобезпечними.

Крім того є дві причини для винятків IO:

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

  2. Метод GetTempFileName підніме IOException, якщо немає унікального тимчасового імені файлу. Щоб вирішити цю помилку, видаліть усі непотрібні тимчасові файли.

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


4 для відповіді № 2

побачити http://support.microsoft.com/kb/982613/en-us