3 Stimmen

Asynchrone Aufrufe mit dem neuen Schlüsselwort 'await'

Ich habe heute asynchrone Methoden verwendet, indem ich Methoden asynchron aufgerufen und die Callback-Methoden des Aufrufers verwendet habe.

Kürzlich konnte ich über diese Stelle in dem es um die neue Art und Weise geht, dies zu tun, indem die neue await Stichwort. Abgesehen von der Einsparung einiger Codezeilen, was sind die wichtigsten Vorteile dieses neuen Modells?

Bietet es eine integrierte Lösung für, wenn Sie zwei verschiedene async-Aufrufe machen, aber die Kontrolle zu nur einer der Aufrufer Callback zurückkehren möchten, nachdem beide abgeschlossen haben?

Was bedeutet CTP (Community Technical Preview)? Ist dieses neue Schlüsselwort in der nächsten Version von C# und VB.NET verfügbar?

4voto

Conrad Frix Punkte 50686

Aus dem Blogbeitrag von Eric Lippert Asynchronität in C# 5, Teil eins

Die Entwickler von C# 5.0 haben erkannt, dass das Schreiben von asynchronem Code mühsam ist, und zwar in vielerlei Hinsicht. Asynchroner Code ist schwer zu erklären, und wie wir gesehen haben gesehen haben, ist die Umwandlung in eine Fortsetzung sehr komplex und führt zu Code, der voller Mechanismen ist, die die die Bedeutung des Codes verschleiern.

Wie in dem Artikel erläutert, geht es bei Iteratorblöcken, anonymen Methoden, Abfragekomplexen und dynamischen Typen darum, etwas, das schwierig ist, einfach zu machen.

Was die technische Vorschau der Gemeinschaft anbelangt. Normalerweise bedeutet das, dass "await" in der nächsten Version von C# enthalten sein wird, aber es gibt keine Garantie, dass sich nicht doch etwas daran ändert. Wenn Sie also etwas schreiben (Code oder Blogposts) und es geht kaputt, geben Sie nicht ihnen die Schuld.

3voto

Brian Rasmussen Punkte 112118

Ich würde sagen, dass "ein paar Zeilen Code sparen" eine Untertreibung ist. Die await Schlüsselwort lässt den Compiler die gesamte notwendige Verdrahtung generieren, damit Sie eine asynchrone Methode schreiben können, die einer regulären synchronen Methode sehr ähnlich sieht.

Das derzeitige Paradigma der Verwendung von Rückrufen hat eine Reihe von Beschränkungen, wie z.B. die Unfähigkeit, bestimmte Sprachkonstrukte zu verwenden, komplexe Fehlerbehandlung und so weiter. All diese Komplexität wird durch den vom Compiler erzeugten Code effektiv verborgen.

Die Async CTP wird mit einer Reihe von Word-Dokumenten ausgeliefert, die weitaus mehr Details enthalten. Falls Sie sie noch nicht gelesen haben, empfehle ich Ihnen, dies zu tun. Das Dokument "Asynchrony in .NET.docx" enthält ein sehr ausführliches Beispiel, das den Umfang des vom Compiler generierten Codes zeigt.

1voto

Alex Shtof Punkte 2800

Wenn Sie nach Abschluss einer asynchronen Operation eine neue Aufgabe starten möchten, benötigen Sie das Schlüsselwort "await" nicht. Alles was Sie brauchen ist Task.ContinueWhenAll Methode.

In Bezug auf CTP - es bedeutet, dass dies in der "Alpha"-Phase ist und kann Fehler enthalten und ist nicht abgeschlossen (kann in der Zukunft ändern. Zum Beispiel wird sich das Schlüsselwort "await" in etwas anderes ändern oder andere Syntaxregeln haben).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X