こんにちは、ありがとうございます。 今回は、私が書いているプログラム(C#)に興味があり、アドバイスを聞きたいと思っています。 通常のプログラム(マルチスレッドではありません)を作成していますが、タイマー(System.Timers.Timer)を追加しましたタイマー、ファイル、競合状態?
また、StreamWriterを使用してファイルに書き込みます。私はこれをこのように開きます。
ファイルが存在する場合は、それが追加されていない場合は作成されます。
後、私はこのようなファイルに
logStream.WriteLine(message);
を書くしかし、私は、主な機能両方から、タイマーによって呼び出される関数からストリームに書き込みます。
問題の症状
私のプログラムは、私が「閉じられたファイルにアクセスできません」と言ったストリームをフラッシュまたは書き込み時に時々エラーを投げると、他の回「閉じたTextWriterにアクセスすることはできませんされて...ファイルは問題なく書かれ続ける、しかし不思議
(?「したTextWriter」とは何である)。(でも、「閉じられたファイルにアクセスできません」というメッセージが想定閉じられたファイルに書かれている)
私はTimerの内部の仕組みに精通していない(私はそれがsepを実行していると思うarateスレッド?)
私の質問は
であるが、それは複数のスレッドからのStreamWriterを使用することは可能ですか? (この場合、メインとタイマーの1つ) 競合状態やそれに似た問題が起こっている可能性はありますか?
もう一つ:私は、論理ミスを犯し、クローズして、ファイルに私はそれを書きたいたびに再度開きます。はい、間違いであり、修正する必要があります。しかし、もし私がこれを訂正すれば、私は上記のエラーがより深刻な欠陥を隠すことなく消えるでしょう。
私の疑惑は、私は、ファイル私はそれを書くごとに時間を開閉おりますので、多分両方のスレッドが
すべてのヘルプは大幅に
質問の1つ:StreamWriterは特定のTextWriterです。 –
ロギング実装を作成しようとしていますか?なぜあなたは使っていないのですか?NETのビルトイン診断APIまたはlog4netのようなロギングライブラリ?ロギングライブラリは、複数のスレッドからのログ要求を受け入れる必要がありますが、ログファイルを破損することなくすべてのエントリを正しく書き込む必要があります。 –