Back to questions
Middle
5
Как записать текст в файл одновременно из двух разных тасок? Как синхронизировать доступ?
Companies where asked
ИТ Инополис
Answer from AI
sobes.tech AI
Для записи текста в файл из двух разных тасков (потоков) в C# необходимо синхронизировать доступ к файлу, чтобы избежать конфликтов и повреждения данных.
Самый простой способ — использовать объект блокировки (lock) для последовательного доступа:
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
class Program
{
private static readonly object fileLock = new object();
private const string filePath = "output.txt";
static void WriteToFile(string text)
{
lock (fileLock)
{
File.AppendAllText(filePath, text + Environment.NewLine);
}
}
static void Main()
{
Task t1 = Task.Run(() => {
for (int i = 0; i < 10; i++)
{
WriteToFile($"Task 1 - Line {i}");
Thread.Sleep(50);
}
});
Task t2 = Task.Run(() => {
for (int i = 0; i < 10; i++)
{
WriteToFile($"Task 2 - Line {i}");
Thread.Sleep(50);
}
});
Task.WaitAll(t1, t2);
}
}
В этом примере lock гарантирует, что в каждый момент времени только одна задача пишет в файл, предотвращая одновременный доступ.
Альтернативно можно использовать SemaphoreSlim или другие механизмы синхронизации, но lock — самый простой и эффективный для таких случаев.