1

実行可能ファイル/アプリケーションの複数のインスタンスを実行しているときに問題が発生しないように、コンソール アプリ内のコード ブロックをロックするためのベスト プラクティスは何ですか?

string folder = Convert.ToString(ConfigurationManager.AppSettings["LogFilePath"]);
string configFile = Path.Combine(folder, "logger.xml");
FileStream fs = new FileStream(configFile, FileMode.Open);
log4net.Config.XmlConfigurator.Configure(fs);
fs.Close();
4

1 に答える 1

0

Mutex を使用する必要があります。「プロセス間同期にも使用できる同期プリミティブ。」参照: MSDN

何かのようなもの:

var mutex = new Mutex(false, "logger.xml-mutex");
if (!mutex.WaitOne(TimeSpan.FromSeconds(100), false))
{
    Console.WriteLine("Timed out...could not acquire mutex.");
    return;
}
try
{
    string folder = Convert.ToString(ConfigurationManager.AppSettings["LogFilePath"]);
    string configFile = Path.Combine(folder, "logger.xml");
    FileStream fs = new FileStream(configFile, FileMode.Open);
    log4net.Config.XmlConfigurator.Configure(fs);
    fs.Close();
}
finally { mutex.ReleaseMutex(); }
于 2013-01-22T14:48:54.163 に答える