Sobes.tech
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 — самый простой и эффективный для таких случаев.