Ich habe über asynchrone Funktionsaufrufe unter http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx?cs-save-lang=1&cs-lang=csharp gelesen.Wie unterscheidet sich async w/erwarten von einem synchronen Anruf?
Beim ersten Beispiel, sie tun dies, die ich erhalten:
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
// You can do work here that doesn't rely on the string from GetStringAsync.
DoIndependentWork();
string urlContents = await getStringTask;
Aber dann, dass sie erklären, wenn es gibt keine Arbeit in der Zwischenzeit getan werden, können Sie es wie folgt tun:
string urlContents = await client.GetStringAsync();
Von dem, was ich verstehe, wird das await
Schlüsselwort den Code fließen, bis die Funktion zurückkehrt suspendieren. Also wie unterscheidet sich das von:
string urlContents = client.GetString();
?
Es blockiert nicht den Hauptausführungskontext/Thread, also z.B. Die Benutzeroberfläche wird nicht eingefroren (in einer Anwendung, die die Benutzeroberfläche verwendet). –
Aber das liegt hauptsächlich daran, dass die Methode selbst asynchron ist, oder? Wird das nicht so lange dauern, solange es mit Dingen beschäftigt ist, kann der aufrufende Thread fortfahren? – Rijk
Nein, async wird benötigt, damit es abwarten kann. All die Magie passiert beim Warten auf den Anruf. – ghord