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 !
}
}