私は次のようにロギングメソッドを実装しました:
ThreadPool.QueueUserWorkItem((state) => {
lock (appendLock) {
using (StreamWriter log = File.AppendText(_logFile)) {
log.WriteLine(message);
}
}
}, null);
1:lock
必要ですか?ロギングをスレッド化したかったのですが、ロックがすでに設定されていることがわかりました。そのため、そのコードを変更するのではなく、単にワーカーデリゲートにラップしました。
2:ロックが必要であると仮定します:これは、ロックを含むデリゲートをキューに入れるための正しい実装ですか?複数のスレッドがログ書き込みを要求している可能性はかなり高いです。デリゲートをワーカースレッドにエンキューすることにより、ファイルI/O実行の長さがアプリケーション自体に影響を与えないようにする必要があります。
3:複数のワーカーがキューに入れられていると仮定しlogWriteDelegate
ます:デリゲートは、受信した順序で呼び出されますか?つまり、現在#32を提供しています...現在#33を提供しています