关于异步作业的执行顺序,我有一些问题。
我会通过示例来解释我的问题,因为这样更容易理解。
这是一个官方示例,来源于https://msdn.microsoft.com/en-us/library/mt674882.aspx,稍作改动后,如下所示。
async Task<int> AccessTheWebAsync()
{
HttpClient client = new HttpClient();
//async operation:
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
// You can do work here that doesn't rely on the string from GetStringAsync.
DoWork1();
// The await operator suspends AccessTheWebAsync.
string urlContents = await getStringTask;
DoWork2();
return urlContents.Length;
}
我可以说DoWork2
是client.GetStringAsync
的回调函数吗?
如果确实如此,那么只有在DoWork1
比client.GetStringAsync
运行时间更长时,DoWork2
才不会紧接着client.GetStringAsync
完成而立即执行。
我这样说对吗?
DoWork1()
完成时,您开始任务并等待任务。如果它已经完成,DoWork2
立即启动。否则,DoWork2
将在任务完成后启动。 - Alexander Derckawait
被描述为回调。 - Damien_The_UnbelieverDoWork2
。似乎"await"和"Task.ContinueWith"函数是相同的。请参阅此帖子:https://dev59.com/9Woy5IYBdhLWcg3wHaXt - derek