紧急求助,防止变量重写

stevenjin 2018-07-10 11:53:28
由于在微信中注册了推送事件,而推送速度很快。还没有执行完,就将之前的变量重写了。
我尝试用日志示例中的“锁”去解决,但还是被重写了。有没有办法确保我的代码执行完,再写变量值呢?
 #region 将异常写入日志
public static class LogManager
{
static object locker = new object();
/// <summary>
/// 重要信息写入日志
/// </summary>
/// <param name="logs">日志列表,每条日志占一行</param>
public static void WriteProgramLog(params string[] logs)
{
lock (locker)
{
string LogAddress = @"c:\log";
if (!Directory.Exists(LogAddress + "\\PRG"))
{
Directory.CreateDirectory(LogAddress + "\\PRG");
}
LogAddress = string.Concat(LogAddress, "\\PRG\\",
DateTime.Now.Year, '-', DateTime.Now.Month, '-',
DateTime.Now.Day, "_program.log");
StreamWriter sw = new StreamWriter(LogAddress, true);
foreach (string log in logs)
{
sw.WriteLine(string.Format("[{0}] {1}", DateTime.Now.ToString(), log));
}
sw.Close();
}
}
}
#endregion
...全文
123 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
1、不要用 new object()来做锁变量。(请在锁之前赋值)
2、必要的时候可以加双重锁。
stevenjin 2018-07-10
  • 打赏
  • 举报
回复
我不是写日志呀,我只是参考了这个作法。
这个才是我实际的代码:

public dynamic WXCallback(dynamic obj)
{
Process.WriteInstance("wx2", "w208300243");
}

public static class Process
{
static object processLocker = new object();
public static void WriteInstance(string key, string value)
{
lock (processLocker)
{
...
}
}
}
  • 打赏
  • 举报
回复
使用WriteLineAsync异步写入日志就不会有这种情况了。
stevenjin 2018-07-10
  • 打赏
  • 举报
回复
不要用 new object()来做锁变量,试了不行呀

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧