1

ある時点で、少なくとも 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();
}
4

2 に答える 2

3

メソッドを (非同期で) 待ちたい場合は、そのメソッドから返されるだけawaitですTask

public async Task MethodCAsync() { await MethodDAsync(); // some code after  } 
public async Task MethodDAsync() { await MethodEAsync(); // some code after  } 
async Task MethodKAsync()
{
  await Save();
}

これにより、非同期メソッドである必要があるプロパティ セッターで問題が発生します。

public bool PropertyName { get; private set; }
public async Task SetPropertyNameAsync() { await MethodAAsync(); // some code after }
于 2013-10-16T16:06:23.437 に答える
2

を呼び出さない限り、UI スレッドから を呼び出すと、ConfigureAwait()常にUI スレッドでコードの実行が再開されます。 心配する必要はありません。awaitTask

于 2013-10-16T15:08:06.557 に答える