/// <summary>
/// 写入日志
/// </summary>
/// <param name="log"></param>
private void WriteLog(string log)
{
//edit at 2012.10.17 改成无锁异步写如日志文件
using (FileStream fs = new FileStream(DataLogFile, FileMode.Append, FileAccess.Write, FileShare.Write, 1024, FileOptions.Asynchronous))
{
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(log+"\r\n");
IAsyncResult writeResult = fs.BeginWrite(buffer, 0, buffer.Length,
(asyncResult) =>
{
FileStream fStream = (FileStream)asyncResult.AsyncState;
fStream.EndWrite(asyncResult);
},
fs);
//fs.EndWrite(writeResult);//这种方法异步起不到效果
fs.Close();
}
//lock (lockObj)
//{
// //using (StreamWriter sw = File.AppendText(DataLogFile))
// //{
// // sw.WriteLine(log);
// // sw.Flush();
// // sw.Close();
// //}
//}
}class Program
{ static void Main(string[] args) { ThreadPool.QueueUserWorkItem(run); ThreadPool.QueueUserWorkItem(run); Console.ReadLine(); } private static void run(object state) { while (true) { Append(); } } public static void Append() { try { //lock (typeof(Program)) //{ using (var writer = File.AppendText("1.txt")) { writer.Write(DateTime.Now.ToString("HHmmss")); } Console.WriteLine("Done"); //} } catch (Exception ex) { Console.WriteLine(ex); } }}static System.Threading.Semaphore _mutex = new System.Threading.Semaphore(1, 1, "IOHelper.Save");
private static bool Save(string fileName, string text, bool isAppend)
{
try
{
if (_mutex.WaitOne(2000, false))//进程间同步。
{
using (StreamWriter writer = new StreamWriter(fileName, isAppend))
{
writer.Write(text);
}
}
return true;
}
catch (Exception err)
{
Log.WriteLogToTxt(err);
}
finally
{
try
{
_mutex.Release();
}
catch
{
}
}
return false;
}
浙公网安备 33010602011771号