「vholders.txt」というテキストファイルを入手しました。
ここでわかるように、私は複数のスレッドを作成しています。これらのスレッドは、指定された独自のデータを処理し、最後に独自の出力をvholders.txt
に書き込みます。しかし、IO例外原因ファイルが別のスレッドによって使用されています。他のスレッドと衝突することなくvholders.txt
ファイルに書き込む方法を教えてください。最初に書き込むスレッドのシーケンスでは、関係ない。
これは私のコードです:
public void execute()
{
for(int x=0;x<entered_length;x++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(PooledProc),x);
}
}
private void PooledProc(object x_)
{
string output = string.Empty;
//does the processing...and assign output its value...
/*this is where I get error*/
StreamWriter sw = File.AppendText("vholders.txt"); //error, file is being used by another process
sw.WriteLine(output);
sw.Close();
/*Now how can I write the output value to the text file vholders.txt without getting IO Exception*/
}
C#では、 ReaderWriteLock クラスを使用して、ファイル(および必要な場合は複数のリーダー)で単一の書き込み操作を許可できます。
また、パフォーマンスを最大化するために、 Asynchronous File I/O を使用して非同期操作を行うことができます(I/O操作の実行中に処理を行うことができます) 。
ただし、これらの概念について説明する前に、問題の最も簡単な解決策を得るために、いくつかの点を明確にする必要があります。
上記のすべての質問に対する答えがNo
である場合、メモリ内のすべての処理を実行し、すべての 出力を一度に書き込むことを検討してください。