public class LogCommon { public static Queue<string> LogQueue = new Queue<string>(); //實例化一個隊列 static LogCommon() //日志寫入文件的方法在類的靜態構造函數中實現,這樣,在隊列被調用的時候,會自動調用此方法 { //開啟線程池來寫日志 ThreadPool.QueueUserWorkItem(a => { while (true) { string ex = string.Empty; lock ("Itcast-DotNet-AspNet-Glable-LogLock") { if (LogQueue.Count > 0) //如果隊列中有數據,將其出隊列 { ex = LogQueue.Dequeue(); } else { Thread.Sleep(30); //如果沒有數據,讓線程睡30毫秒,之后進入下一輪循環 continue; } } //需要串行執行的代碼 } }); }
public static void WriteLog(string str) //將日志寫入到隊列中的方法 { lock ("Itcast-DotNet-AspNet-Glable-LogLock") { LogQueue.Enqueue(str); } }