Middle
38
Wie schreibt man Text gleichzeitig aus zwei verschiedenen Tasks in eine Datei? Wie synchronisiert man den Zugriff?
Unternehmen wurden gefragt
ИТ Инополис
Antwort von AI
sobes.tech KI
Для записи текста в файл из двух разных тасков (потоков) в 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 — самый простой и эффективный для таких случаев.