我正在使用System.Threading.ThreadPool來管理來自服務的作業隊列。我已經執行記錄這樣的...我可以從Worker線程調用靜態類實例的靜態方法嗎?
abstract class Global
{
public static LogFile LogFile = null;
}
public class LogFile : IDisposable
{
private StreamWriter sw;
public LogFile(string path){}
public void WriteEntry(string logText)
{
lock (sw)
{
sw.WriteLine(logText);
}
}
}
我想創建日誌在服務啓動,並從我的排隊工作線程使用它..這樣的事情...
//On Service Start
Global.LogFile = new LogFile("log.txt");
//Kick of worker thread
ThreadPool.QueueUserWorkItem(objWrkrThread.CallbackMethod, iCount);
//Worker thread logs an entry in CallbackMethod()
Global.LogFile.WriteEntry("Hello World");
是這安全嗎?將調用一個類的靜態實例上的方法無意中'同步'或'阻止'我的線程?
邁克爾
靜態方法本質上不是線程安全的。請參閱Jon Skeet的這個答案[http://stackoverflow.com/questions/1090650/are-static-methods-thread-safe/1090670#1090670] – TheVillageIdiot 2009-07-08 02:40:12