Как правильно параллельно записывать данные в файл из двух потоков? - 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 ");
}
}