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毫秒)。