C# 使用Task.ContinueWith()作为事件形式是否被认为是一种良好的做法;“任务结束”;

C# 使用Task.ContinueWith()作为事件形式是否被认为是一种良好的做法;“任务结束”;,c#,asynchronous,task,C#,Asynchronous,Task,任务没有可用于执行后续代码的已完成事件/方法。如果Task要执行长时间运行的操作(例如从web下载数据以更新本地数据库),使用Task.ContinueWith()方法执行类似已完成事件是否被视为良好做法?这种方法是否有任何不必要的副作用或问题 可以使用ContinueWith()跟踪长时间运行操作的完成情况。但是,从.NET 4.5开始,有一种更简洁的方法来编写此代码,即使用async/wait关键字。例如: using (var client = new HttpClient(...)) {

任务
没有可用于执行后续代码的已完成事件/方法。如果
Task
要执行长时间运行的操作(例如从web下载数据以更新本地数据库),使用
Task.ContinueWith()方法执行类似已完成事件是否被视为良好做法?这种方法是否有任何不必要的副作用或问题

可以使用
ContinueWith()
跟踪长时间运行操作的完成情况。但是,从.NET 4.5开始,有一种更简洁的方法来编写此代码,即使用
async
/
wait
关键字。例如:

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!";
}
您可以将
wait
之后发生的任何事情解释为continuation,即您通常会在
continuateWith()中放入的内容。
wait
的作用是等待操作完成,从返回的任务中解包结果,并在当前上下文(本例中为UI线程)上恢复执行


这是执行长时间运行的I/O操作并仍然具有响应性UI的好方法。您需要使用
async
方法执行此操作-有关更多信息,请参阅。

哦,我认为
wait
阻止了执行。因此,它返回给调用方,就好像方法已完成一样,然后当等待的
async
方法最终返回时,在异步调用下面的语句处继续执行,是吗?
await
只允许UI在等待方法完成执行的同时继续处理。这就是你要找的@KauanRmkYes,没错。等待的要点是允许在不阻塞当前上下文(在本例中为UI线程)的情况下执行长时间运行的操作。这在Windows Phone等平台上尤其重要,因为在这些平台上,用户界面可以阻止的时间有一个硬限制(如果我没有弄错的话,大约50毫秒)。