1

UI スレッドに対してメソッドを非同期的に呼び出すとします。

UIDispatcher.BeginInvoke( new Action(_insert), DispatcherPriority.Normal, new object[] { } )

あなたは呼び出しを行っています。これからは、ランタイム環境がメソッドをいつ実行するかを決定しますが、プログラムは「通常の」実行パスを続行します。

これらの非同期的に実行されるメソッドが返されるときに同期するメカニズムがあるかどうか疑問に思っていますか? 複数のスレッドを使用する場合とほとんど同じ問題があるようです。

しかし、スレッドと見なされる前に非同期的に呼び出された戻りメソッドですか? のような通常の同期の取り組みのため、そうではないようです

lock (someObject) { //... }

または専用ロックの使用が機能していないようです。

付録:

この問題が発生する実際の状況は次のとおりです。

非同期的に呼び出されたメソッドは、最後のステートメントとしてreturn静的クラスのメソッドを呼び出します。このreturnメソッド内で、よく使用されるリソース (リスト) を同期する必要があります。例として抜粋した次の (概要のような) コードを検討してください。

// A simple method that gets invoked asynchronously
public void _insert () {

    // do some code

    StaticClass.Returned();
}


public static StaticClass {

   //...

   public static void Returned () {

        // use a shared resource !
   }

}
4

1 に答える 1

0

.NET の非同期パターン、BackgroundWorker、またはManualResetEvent

http://msdn.microsoft.com/en-us/library/ms228969.aspx

于 2012-07-09T15:19:07.700 に答える