我有關於異步作業的執行順序的問題。回調異步並等待
我會問我的問題與例子,因爲它更容易可以理解的。
距離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
回調?
如果是這樣,DoWork2
在client.GetStringAsync
完成後不立即執行如果DoWork1
的運行時間比client.GetStringAsync
更長。
我在這兒嗎?
是的,你開始了任務,當'DoWork1()'完成時,你將會等待任務。如果它已經完成,「DoWork2」立即啓動。如果不是的話,當任務完成時'DoWork2'開始。 –
@AlexanderDerck然後它不是我預期的那種「回調」。在我看來,一旦異步函數完成,應立即執行回調。 – derek
只是爲了澄清:即使DoWork1尚未完成,您還是希望DoWork2能夠執行(完成getStringTask)嗎?也許看看[Task.ContinueWith](https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.continuewith.aspx)方法。 –