1

ファイルの読み取りと書き込みが必要なプロセスがあります。アプリケーションの読み取りと書き込みには特定の順序があり、この順序を維持したいと考えています。私がやりたいのは、最初の操作を開始させ、ファイルにアクセスするためのキューのような先着順で最初の操作が完了するまで、2 番目の操作を待機させる何かを実装することです。私が読んだことから、ファイルのロックは私が探しているもののように思えますが、非常に良い例を見つけることができませんでした。誰でも提供できますか?

現在、私は .Synchronized で TextReader/Writer を使用していますが、これは私が望んでいたことをしていません。

これが非常に基本的な質問である場合は申し訳ありませんが、スレッド化が頭痛の種になります:S

4

2 に答える 2

2

次のように簡単にする必要があります。

public static readonly object LockObj = new object();

public void AnOperation()
{
    lock (LockObj)
    {
        using (var fs = File.Open("yourfile.bin"))
        {
            // do something with file
        }
    }
}

public void SomeOperation()
{
    lock (LockObj)
    {
        using (var fs = File.Open("yourfile.bin"))
        {
            // do something else with file
        }
    }
}

基本的に、ロック オブジェクトを定義してから、ファイルで何かを行う必要があるときはいつでも、C#lockキーワードを使用してロックを取得してください。ステートメントに到達するlockと、ロックが取得されるまで、実行は無期限にブロックされます。

ロックに使用できる構造は他にもありますが、lockキーワードが最も簡単だと思います。

于 2012-11-07T16:02:36.507 に答える
1

現在のバージョンの .Net Framework を使用している場合は、.Net Framework を利用できますTask.ContinueWith

作業単位が論理的に常に「一部を読み取り、次に一部を書き込む」場合、以下はその意図を簡潔に表現しており、スケーリングする必要があります。

string path = "file.dat";

// Start a reader task
var task = Task.Factory.StartNew(() => ReadFromFile(path));

// Continue with a writer task
task.ContinueWith(tt => WriteToFile(path));

// We're guaranteed that the read will occur before the write
// and that the write will occur once the read completes.
// We also can check the antecedent task's result (tt.Result in our
// example) for any special error logic we need.
于 2012-11-07T16:02:58.273 に答える