C# の backgroundworker からアップグレードするために、新しい async await 機能を使用しています。次のコードでは、ContinueWith メソッドを使用して複数のタスクの実行を複製しようとしています。
Task t1 = new Task
(
() =>
{
Thread.Sleep(10000);
// make the Task throw an exception
MessageBox.Show("This is T1");
}
);
Task t2 = t1.ContinueWith
(
(predecessorTask) =>
{
if (predecessorTask.Exception != null)
{
MessageBox.Show("Predecessor Exception within Continuation");
return;
}
Thread.Sleep(1000);
MessageBox.Show("This is Continuation");
},
TaskContinuationOptions.AttachedToParent | TaskContinuationOptions.OnlyOnRanToCompletion
);
t1.Start();
try
{
t1.Wait(); <------ Comment
t2.Wait(); <------ Comment
}
catch (AggregateException ex)
{
MessageBox.Show(ex.InnerException.Message);
}
私の質問は、t1.wait と t2.wait タスクが UI をブロックしていないとコメントしたときです。ただし、スレッドが完了するまで t1.wait と t2.wait UI ブロックのコメントを外すと。望ましい動作は、UI をブロックせずに try/catch ブロックでエラーをキャッチすることです。私は何が欠けていますか?