click button event
は、最初にlist
を "B"で、次に "A"で埋めます。'Task.Factory.StartNew'を使用した非同期wpfイベントは待機を待機しません
List<string> list = new List<string>();
private async void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
await Task.Factory.StartNew(async() =>
{
await Task.Factory.StartNew(() => Thread.Sleep(1000));
list.Add("A");
});
list.Add("B");
}
Q:どのように私はのawait非同期概念を使用して.Add( "B")の前に起こる.Add( "A")の実行を強制することができますか?
私が試した:
- を私は
Task
でvoid
を交換しようとしたが、機能はその後、Clickイベントに割り当てることができませんでした。 - 私はTask.Wait()関数を試しましたが、少し複雑なケースではデッドロックが発生します。
注:これは単純化された例です。私は現実世界のコード私は非同期メソッドのシーケンスを呼び出している、すべてTask
オブジェクトを返すと、すべてが待たれている、と彼らはまだ必要な順序で実行されません。関数Task.Factory.StartNew()
は全く同じ方法で私の実際のコードで使用されます。