Итак, это продолжение моего последнего вопроса. Так что вопрос был «Какой лучший способ создать программу, которая является потокобезопасной, в том смысле, что ей нужно записать двойные значения в файл. Если функция, которая сохраняет значения через streamwriter вызываются несколькими потоками? Каков наилучший способ сделать это? "Thread safe StreamWriter C# как это сделать? 2
И я изменил код, найденный в MSDN, как насчет следующего? Это правильно записывает все в файл.
namespace SafeThread
{
class Program
{
static void Main()
{
Threading threader = new Threading();
AutoResetEvent autoEvent = new AutoResetEvent(false);
Thread regularThread =
new Thread(new ThreadStart(threader.ThreadMethod));
regularThread.Start();
ThreadPool.QueueUserWorkItem(new WaitCallback(threader.WorkMethod),
autoEvent);
// Wait for foreground thread to end.
regularThread.Join();
// Wait for background thread to end.
autoEvent.WaitOne();
}
}
class Threading
{
List<double> Values = new List<double>();
static readonly Object locker = new Object();
StreamWriter writer = new StreamWriter("file");
static int bulkCount = 0;
static int bulkSize = 100000;
public void ThreadMethod()
{
lock (locker)
{
while (bulkCount < bulkSize)
Values.Add(bulkCount++);
}
bulkCount = 0;
}
public void WorkMethod(object stateInfo)
{
lock (locker)
{
foreach (double V in Values)
{
writer.WriteLine(V);
writer.Flush();
}
}
// Signal that this thread is finished.
((AutoResetEvent)stateInfo).Set();
}
}
}
Некоторые комментарии с downvotes были бы приятными. –