0

メインスレッドでタイマーを開始するWindowsサービスがあります。タイマーの仕事は、xmlファイルをメモリにロードし、値に対していくつかの処理を実行し、結果をファイルに保存することです。たとえば、処理には10分かかる場合があります。(この操作をAと呼びましょう)

また、xmlファイルを更新する同じサービスでWCFを介して生成されるスレッドもあります。(この操作をBと呼びましょう)

何が起こっているのかというと、オペレーションAが実行され、オペレーションAが完了する前にオペレーションBが完了するまで実行されます。その結果、操作Aは、操作Bが完了したすべての作業を上書きします。

だから私がする必要があると思うことは:

  1. オペレーションAの開始時にオペレーションBが実行されている場合は、オペレーションBが完了するのを待ってから、オペレーションAを実行します。

  2. オペレーションBが開始されたとき、オペレーションAが実行されている場合は、オペレーションAが完了するのを待ってから、オペレーションBを実行します。

これができれば問題ないと思います。

これが理にかなっていることを願っています-私の待機理論はこれを行うための最良の方法ですか?どうすればC#(または最良の方法)でこれを行うことができますか?

ありがとうダモ

4

1 に答える 1

2

lockこれは、C#のステートメントを使用することで簡単に解決できます。

必要なのは、コードの両方のセクションがアクセスできるオブジェクトのインスタンス(タイプは関係ありません)だけです。

public static void MethodA(object lockObject)
{
    lock(lockObject)
    {
        //code that needs to be accessed by just one thread
    }
}

public static void MethodB(object lockObject)
{
    lock(lockObject)
    {
        //code that needs to be accessed by just one thread
    }
}

これらの操作の両方がタイマーから実行されている場合は、待機を追加しても、コードの実行にタイマーの間隔よりも長くかかるポイントに追い込まれないようにする必要があります。そうすると、新しいコードが完了するよりも早く実行され、実行されるインスタンスが常に増えていきます。(これは、前のタスクがまだ実行されている場合は何もしないことで解決されます。)

于 2012-12-11T15:27:59.593 に答える