Когда я выполняю код ниже, я получаю общее исключение The process cannot access the file *filePath* because it is being used by another process
.
Какой самый эффективный способ разрешить этой теме ждать, пока она не сможет безопасно получить доступ к этому файлу?
Допущения:
- файл был только что создан мной, поэтому маловероятно, что другое приложение получит к нему доступ.
- более одного потока из моего приложения могут пытаться запустить этот код для добавления текста в файл.
:
using (var fs = File.Open(filePath, FileMode.Append)) //Exception here
{
using (var sw = new StreamWriter(fs))
{
sw.WriteLine(text);
}
}
Пока что лучшее, что я придумал, это следующее. Есть ли недостатки в этом?
private static void WriteToFile(string filePath, string text, int retries)
{
const int maxRetries = 10;
try
{
using (var fs = File.Open(filePath, FileMode.Append))
{
using (var sw = new StreamWriter(fs))
{
sw.WriteLine(text);
}
}
}
catch (IOException)
{
if (retries < maxRetries)
{
Thread.Sleep(1);
WriteToFile(filePath, text, retries + 1);
}
else
{
throw new Exception("Max retries reached.");
}
}
}