複数のスレッドから単一のログファイルへ書き出しを行う

似たような処理をパラメータ変えて複数のスレッドで実行して処理時間を短縮してみようと試みて、

各々のスレッドの処理結果は単一のログファイルに追記し、Excelで開けるように考えてました。

File.AppendAllTextなんかを使って、いざ複数のスレッドから書き込んでみるとIO.Exceptionが発生。

「別のプロセスから開いてますよ」って当然か。

FileShare.ReadWriteにすることでIO.Exceptionを回避できるようで、下記のコードでログ追記メソッドを実装した。

private void Logging(string logFullPath , string logstr)
{
	FileStream fs = new FileStream(logFullPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
	StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("Shift_JIS"));
	TextWriter tw = TextWriter.Synchronized(sw);
	tw.Write(logstr);
	tw.Flush();
	fs.Close();
}

排他処理...になるのかな?
タグ:

コメント(0)

コメントを投稿する