.Net 并发写入文件的多种方式

1、简介

本文主要演示日常开发中利用多线程写入文件存在的问题,以及解决方案,本文使用最常用的日志案例!

2、使用File.AppendAllText写入日志

这是种常规的做法,通过File定位到日志文件所在位置,然后写入相应的日志内容,代码如下:

        static string _filePath = @"C:\Users\zhengchao\Desktop\测试文件.txt";
        static void Main(string[] args)
        {
            WriteLogAsync();
            Console.ReadKey();
        }

        static void WriteLogAsync()
        {
            var logRequestNum = 100000;//请求写入日志次数
            var successCount =0;//执行成功次数
            var failCount = 0;//执行失败次数
            //模拟100000次用户请求写入日志操作
            Parallel.For(0, logRequestNum, i =>
            {
                try
                {
                    var now = DateTime.Now;
                    var logContent = $"当前线程Id:{Thread.CurrentThread.ManagedThreadId},日志内容:暂时没有,日志级别:Warn,写入时间:{now.ToString()}";
                    File.AppendAllText(_filePath, logContent);
                    successCount++;
                }
                catch (Exception ex)
                {
                    failCount++;
                    Console.WriteLine(ex.Message);
                }
            });
            Console.WriteLine($"Request Count:{logRequestNum}. Success Count:{successCount} Failed Count:{failCount}.");
        }

报错了,原因,Windows不允许多个线程同时操作同一个文件,所以,抛异常.所以必须解决这个问题,首先想到的肯定时锁.所以MSDN一下,找到了一个锁,ReaderWriterLockSlim,这个锁的用途如下:

猜你喜欢

转载自www.cnblogs.com/GreenLeaves/p/10617306.html