2014-11-20 70 views

回答

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了解更多信息。

+0

哦,我以为'await'阻止了执行。所以它返回给调用者,就好像这个方法已经完成了一样,然后当等待的'async'方法最终返回时,然后执行在异步调用的右下方的语句处继续执行,是吗? – 2014-11-21 00:05:50

+0

'await'只允许UI在等待方法完成执行的同时继续处理。这就是你要找的@KauanRmk – techvice 2014-11-21 00:42:48

+0

是的,确切的。等待的要点是允许长时间运行的操作在不阻塞当前上下文的情况下发生(本例中为UI线程)。这对于Windows Phone等平台来说尤为重要,因为对于UI可以阻塞的时间量有严格限制(如果我没有弄错,大约需要50毫秒)。 – Gigi 2014-11-21 07:58:11

相关问题