Как правильно параллельно записывать данные в файл из двух потоков? - C#

Узнай цену своей работы

Формулировка задачи:

Есть Action в нем вызывается метод, который пишет некую Data в текстовый файл:
public ActionResult ParallelTest()
{
    data="Test";
    path="c:\\Test.txt";
    WriteToFile(data,path);
}
...
 
public static void WriteToFile(string data, string path)
{
      using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Write))
                {
                    for(int i=0;i<20000;i++)
                    {
                         foreach (var c in data)
                         {
                             fs.WriteByte(Convert.ToByte(c));
                         }
                    }
                }
          
}
Как сделать так, чтобы несколько пользователей вызвали одновременно Action ParallelTest и запись прошла бы без конфликтов?

Решение задачи: «Как правильно параллельно записывать данные в файл из двух потоков?»

textual
Листинг программы
public class MyThread
    {
        private Thread tr;
        private string fileName;
        private string data;
 
        public MyThread(string fileName, string data)
        {
            this.fileName = fileName;
            this.data = data;
            tr = new Thread(this.ParallelTest);
            tr.Start();
        }
 
        private void ParallelTest()
        {
            using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write,[B] FileShare.Write[/B]))
            {
                using (StreamWriter sw = new StreamWriter(fs))
                {
                    for (int i = 0; i < 20; i++)
                    {
                        fs.Seek(0, SeekOrigin.End);
                        sw.WriteLine(data);
                        sw.Flush();
                        //Thread.Sleep(3000);
                    }
                }
            }
        }
    }
 
    internal class Program
    {
        private static void Main(string[] args)
        {
            MyThread mtr1 = new MyThread(@"Test.txt", "Test 1 ");
            MyThread mtr2 = new MyThread(@"Test.txt", "Test 2 ");
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.556 из 5
Похожие ответы