多线程写LOG文件方法实现代码(防止写入信息错乱、写入动作异常延时造成的主线程卡死)

多线程写LOG文件方法实现代码:

使用Task建立异步保存LOG的动作,保证主线程的正常运行(当LOG写入失败或者因其它原因造成写入延时的情况下) 

System.Threading.Tasks.Task.Run(() =>  { SaveTestResult(sTempStr); });

 

private void SaveTestResult( string sMesJudgeResult)
        {
            try
            { 
                LogWriterLock.EnterWriteLock();   //保证同时只能有一个对象向文件写入信息,完成后,释放Locker

                //获取Log保存路径 
                string sFileNamePath = Application.StartupPath + "\\" + System.DateTime.Now.Year.ToString() + "\\" + System.DateTime.Now.Month +   "\\" + System.DateTime.Now.Day.ToString();

                if (!System.IO.Directory.Exists(sFileNamePath))
                    System.IO.Directory.CreateDirectory(sFileNamePath);

                sFileNamePath += "\\" + System.DateTime.Now.ToString("yyyyMMdd") + ".txt";

                try
                {
                    if (!System.IO.File.Exists(sFileNamePath))
                    {
                        System.IO.File.Create(sFileNamePath).Dispose();
                    }
                }
                catch (Exception Ex)
                {
                    AddListItem("创建测试结果文件时出错," + Ex.Message);
                    return;
                }

                try
                { 

                    //保存日志至客户指定的位置
                    FileStream fs = new FileStream(sFileNamePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
                    StreamWriter sr = new StreamWriter(fs, System.Text.Encoding.Default);
                    sr.WriteLine(sMesJudgeResult);

                    sr.Close();

                    //关闭后,需要手动清理一下资源 
                    sr.Dispose();
                    sr = null;

                }
                catch (Exception Ex)
                {
                    AddListItem("向LOG文件保存测试结果失败!" + Ex.Message);
                    return;

                }
            }
            finally
            {
                LogWriterLock.ExitWriteLock();  //保证同时只能有一个对象向文件写入信息,释放Locker
            }

        }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值