我正在使用新的异步等待功能从 C# 中的后台工作人员升级。在下面的代码中,我尝试使用 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 块中的错误。我错过了什么?