Как правильно параллельно записывать данные в файл из двух потоков? - C#
Формулировка задачи:
Есть Action в нем вызывается метод, который пишет некую Data в текстовый файл:
Как сделать так, чтобы несколько пользователей вызвали одновременно Action ParallelTest и запись прошла бы без конфликтов?
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)); } } } }
Решение задачи: «Как правильно параллельно записывать данные в файл из двух потоков?»
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 "); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д