当前位置: 首页 > 编程语言 > C#

如何做线程安全的C#StreamWriter?2分享

时间:2023-04-10 23:03:10 C#

线程安全的StreamWriterC#怎么做?2所以这是我之前问题的延续-所以问题是“构建需要将双精度值写入文件的线程安全程序的最佳方法是什么。如果通过streamwriter保存值的函数是叫多线程?最有什么好办法?我修改了一些我在MSDN上找到的代码,下面的怎么样?这个正确地将所有内容写入文件。namespaceSafeThread{classProgram{staticvoidMain(){线程threader=newThreading();AutoResetEventautoEvent=newAutoResetEvent(false);线程regularThread=newThread(newThreadStart(threader.ThreadMethod));regularThread.Start();ThreadPool.QueueUserWorkItem(newWaitCallback(threader.WorkMethod),autoEvent);//等待前台线程结束。regularThread.Join();//等待后台线程结束。autoEvent.WaitOne();}}classThreading{列表值=newList();staticreadonlyObjectlocker=newObject();StreamWriterwriter=newStreamWriter("文件");staticintbulkCount=0;staticintbulkSize=100000;publicvoidThreadMethod(){lock(locker){while(bulkCount{//通过等待一段时间来模拟一些“实际工作”varsleepTime=newRandom().Next(10000);控制台.WriteLine("线程{0}工作{1}毫秒",Thread.CurrentThread.ManagedThreadId,sleepTime);Thread.Sleep(sleepTime);resultsBuffer.AddResult(Math.PI*i);});}foreach(varresultLineinFile.ReadAllLines(tempFile)){Console.WriteLine("Linefromresult:{0}",resultLine);}}}所以你说你想要一堆线程将数据写入单个使用StreamWriter的文件?简单只需锁定StreamWriter对象。此处的代码将创建5个线程。每个线程将执行5个“动作”,并且在每个动作结束时,它会将5行写入名为“file”的文件。使用System.Collections.Generic;使用System.IO;使用系统线程;namespaceConsoleApplication1{classProgram{staticvoidMain(){StreamWriterWriter=newStreamWriter("file");ActionThreadProcedure=(i)=>{//一个线程可能会执行很多动作,并在每个动作后写出结果//这里的外层循环表示这个线程将要执行的多个动作(intx=0;xAsyncResultList=newList();for(intw=0;w结果应该是一个包含125行的文件“文件”,所有的“操作”同时进行,每个操作的结果同步写入文件。你那里的代码被巧妙地打破了——特别是,如果排队的工作项目首先运行,那么它将立即刷新(空)值列表,然后终止,之后你的工作人员去填充列表(最终将被忽略)。自动重置事件也不做任何事情,因为没有任何查询或等待其状态。此外,由于每个线程使用不同的锁,锁是没有意义的!每次访问该编写器时,您需要确保你持有一个共享锁。你不需要在刷新代码和生成代码之间进行锁定;您需要确保在生成完成后运行冲洗。你可能在正确的轨道上-虽然我会使用固定大小的数组而不是列表,并在数组已满时刷新数组中的所有条目。如果线程livelong,这就避免了内存耗尽的可能性。以上就是C#学习教程:Howtodothread-safeStreamWriterC#?2所有分享的内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: