ある時点で、少なくとも 10 個のメソッドが未完成としてスタックで利用可能であるとしましょう。これらのメソッドの多くは、UI に影響を与えるアクションを処理しています。この時点で、保存コマンドを発行したいと思います。保存コマンドは正常に終了することも、失敗することもあります。結果に基づいて、さまざまなアクションを実行してから、スタックに残っているメソッドに実行を返したいと思います。
これで、Save コマンドを同期的に実行しても問題ありません。Save コマンドを非同期で実行し、その実行をメッセージ ポンプ (UI) に戻したいのですが、スタック上のすべてのコード (メソッド) は SaveCommand が完了するまで待機する必要があります。
さて、私が理解しているように、呼び出しが同じスレッド (私の場合は UI スレッド) で行われるという保証はありません。SO、呼び出された最初のメソッド (スタック内の他のすべてのメソッドの親) を待つことはできません。別のスレッドが開始されると、UI 例外 (別のスレッドから UI 要素にアクセスする) が発生するためです。
では、この状況をどのように処理しますか?コード例:
public bool PropertyName {get; set { MethodA(); // some code after };}
public void MethodB() { MethodC(); // some code after }
public void MethodC() { MethodD(); // some code after }
public void MethodD() { MethodE(); // some code after }
// etc
void MEthodK()
{
Save();
}