Task
没有可用于执行后续代码的已完成事件/方法。如果Task
执行长时间运行的操作(例如从Web下载数据以更新本地数据库),那么使用方法Task.ContinueWith()
执行完成的类似事件是否是一种良好的做法?这种方法可能会遇到任何不必要的副作用或问题吗?
答案 0 :(得分:4)
可以使用ContinueWith()
跟进完成长时间运行的操作。但是,从.NET 4.5开始,有一种更简洁的方法来编写它,即使用async
/ await
关键字。例如:
using (var client = new HttpClient(...))
{
// long-running download operation, but UI remains responsive because
// the operation executes asynchronously
var response = await client.GetAsync();
// control resumes here once the above completes,
// returning control to the UI thread.
this.TextField.Text = "Download Complete!";
}
您可以将await
之后发生的任何内容解释为延续,即您通常放在ContinueWith()
中的内容。 await
具有等待操作完成,从返回的任务中解包结果,并在当前上下文中恢复执行的效果 - 在这种情况下是UI线程。
这是执行长时间运行的I / O操作并且仍然具有响应式UI的好方法。您需要使用async
方法执行此操作 - 有关详细信息,请参阅official documentation。