Así que esta es una continuación de mi última pregunta - Entonces la pregunta era "¿Cuál es la mejor manera de crear un programa que sea seguro para subprocesos en términos de que necesita escribir valores dobles en un archivo? Si la función que guarda ¿los valores a través de streamwriter están siendo llamados por múltiples hilos? ¿Cuál es la mejor manera de hacerlo? "Thread safe StreamWriter C# ¿cómo hacerlo? 2
Y modifiqué algún código encontrado en MSDN, ¿qué tal lo siguiente? Este escribe correctamente todo en el archivo.
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();
}
}
}
Algunos comentarios con los downvotes hubieran sido agradables. –