我在WPF项目中有以下异步方法:
private async void RecalculateRun(Guid run_number)
{
// kick off the Full recalculation
//
await FullRecalcAsync(run_number);
// When thats done, asyncronously kick off a refresh
//
Task RefreshTask = new Task(() => RefreshResults());
await RefreshTask;
}
第一个await
执行大量计算,第二个执行结果并更新一些绑定变量。我没想到UI会在第二个await
期间更新,但我希望它在完成时能够这样做。当然,这不会发生。另外,我想指出,如果我在第一个RefreshTask
之后同步拨打await
,那么它可以正常工作。
答案 0 :(得分:3)
您在不启动任务的情况下创建任务。您需要致电Start
:
Task RefreshTask = new Task(() => RefreshResults());
RefreshTask.Start();
await RefreshTask;
或者最好不要使用Task.Run
await Task.Run(() => RefreshResults());
通常不鼓励直接使用Task
构造函数:
一般情况下,我总是建议使用
Task.Factory.StartNew
,除非特定情况提供了使用构造函数后跟Start
的令人信服的理由。我推荐这个有几个原因。首先,它通常更有效率