web-dev-qa-db-de.com

Verwenden von async-await unter .net 4

Momentan beginne ich mit der Erstellung einer Anwendung, die von der Async-Wartet-Funktion von C # 5 stark profitieren würde. Ich bin mir aber nicht sicher, welche VS-Version und welche asynchrone Laufzeit verwendet werden soll.

Wenn ich mir die Beliebtheitstabellen für das Betriebssystem anschaue, muss ich Windows XP= für etwa drei weitere Jahre unterstützen. Es sieht so aus, als würde .net 4.5 nur auf neueren Windows-Versionen ausgeführt. Die Entwicklungsmaschinen verwenden Windows 7, daher ist die Verwendung einer neueren Version von VS kein Problem.

Nun muss ich zuerst einen Compiler dafür auswählen:

  • VS2010 mit AsyncCTP
  • VS2012-Vorschau (und endgültig, sobald sie eintrifft), wobei das Ziel auf .net 4.0 festgelegt wird
  • Mono (Sieht aus wie 2.12 hat Async-Warten, ich bevorzuge/bin VS gegenüber MonoDevelop als IDE verwendet)

Welches hat weniger Programmfehler? Betrachtet man Jon Skeets Blog verwendet die VS2012-Vorschau einen Never-Code-Generator als das CTP.

Und was noch wichtiger ist, welche Laufzeit soll verwendet werden?

Enthält VS2012 eine weiterverteilbare asynchrone Laufzeitumgebung zur Verwendung mit .net 4?

Ich habe es geschafft, Code mit der Vorschau zu kompilieren, indem ich auf die AsyncCTP-Laufzeit verwiesen habe. Da das CTP jedoch ungewöhnliche Lizenzbedingungen aufweist, scheint dies keine gute langfristige Lösung zu sein.

Oder sollte ich eine Implementierung eines Drittanbieters verwenden? Vielleicht hat Mono einen?

Zum Verteilen der Bibliothek ziehe ich es vor, die DLL einfach im selben Verzeichnis wie die Anwendung abzulegen, anstatt in einer Art Installationsprogramm.

Ich würde es auch mögen, wenn meine Binärdateien unter Mono + Linux/MacOS ohne Änderungen funktionieren würden. Daher sollte die Laufzeit entweder mit dem in Mono (wahrscheinlich 2.12) integrierten Betriebssystem kompatibel sein oder die Verwendung auf Nicht-Windows-Betriebssystemen ermöglichen.

137
CodesInChaos

Microsoft hat das Async Targeting Pack (Microsoft.Bcl.Async) durch Nuget als Ersatz für das AsyncCTP veröffentlicht.

Sie können hier mehr darüber lesen: http://blogs.msdn.com/b/bclteam/archive/2013/04/17/Microsoft-bcl-async-is-now-stable.aspx .

Sie können über die vorherige Version hier lesen: http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx .

Da dieses Paket offiziell unterstützt wird, glaube ich, dass die beste Option für das Targeting XP + async die Verwendung von Visual Studio 2012 + C # 5 + Async Targeting Pack ist.

Wenn Sie jedoch das Bedürfnis haben, .NET 3.5 als Ziel festzulegen, können Sie weiterhin (my) AsyncBridge for .NET 3.5 verwenden.

106
Omer Mor

Wenn Sie bereit sind, andere .Net-Sprachen in Betracht zu ziehen, kann F # Ihr Problem lösen. Es hat seit Jahren den asynchronen {} Berechnungsausdruck und ist sogar mit .Net 2.0 abwärtskompatibel. Mindestanforderung ist Windows XP SP3. Die Laufzeit kann heruntergeladen werden hier .

24
Marc Sigrist

Wenn Sie in der Lage sein möchten, Ihre Software zu vertreiben, denke ich, dass die Mono-Lösung momentan wirklich Ihre einzige Option ist. Sie möchten auch, dass das Endergebnis unter Mono über Linux und OS X ausgeführt wird. Zunächst scheint es die natürliche Lösung zu sein, Mono als Ziel festzulegen.

Ihre nächste Ausgabe ist die IDE. MonoDevelop würde natürlich gut funktionieren, aber Sie sagen, Sie bevorzugen Visual Studio.

Greg Hurlman hat ein Profil erstellt um in Visual Studio gegen Mono 2.8 zu programmieren. Wenn Sie ihm folgen, kann er Sie möglicherweise in die richtige Richtung für die Entwicklung gegen Mono 2.11/2.12 in Visual Studio lenken.

Natürlich gibt es auch Mono Tools für Visual Studio , ein kommerzielles Produkt. Ich gehe davon aus, dass es immer noch von Xamarin angeboten wird.

Sie sind möglicherweise auch in der Lage, die erforderlichen 4.5-Profilassemblys von Mono aus über .NET auszuführen, aber das habe ich nicht versucht. Das 4.5-Profil ist eine strikte Übermenge der 4.0-API. Vielleicht probieren Sie es aus und melden sich zurück.

BEARBEITEN: Möglicherweise können Sie Visual Studio Async CTP jetzt in der Produktion verwenden.

Folgendes steht auf der Download-Seite :

Beinhaltet eine neue EULA für die Produktion. Hinweis - Diese Lizenz ist keine Aufforderung für Sie, das CTP für Ihren Produktionscode zu verwenden. Das CTP bleibt eine nicht unterstützte und auf eigenes Risiko verwendete Technologievorschau. Wir haben jedoch viele Anfragen von Entwicklern erhalten, das CTP für den Produktionscode zu verwenden, und haben daher die Lizenz geändert, um dies zu ermöglichen.

3
Justin

Mit der Beta-Version von VS 12 können Sie .NET 4.0 mithilfe von async/await als Ziel festlegen.

Sie müssen Code in Ihr Projekt kopieren, der die Typen enthält, auf die sich der Compiler stützt.

Details hier

Bearbeiten: Wir haben diese Technik in eine Open-Source-Bibliothek namens AsyncBridge umgewandelt: https://nuget.org/packages/AsyncBridge

3
Alex Davies

Wenn Sie Ihre Software nach der Veröffentlichung von MS C # 5.0 verteilen möchten, können Sie mit der Entwicklung mit AsycnCTP beginnen. Andernfalls würde ich Ihnen nicht empfehlen, es zu verwenden, da es nur CTP ist, nicht einmal eine Beta. Es kann in der Nähe der Beta-Phase und der Veröffentlichung sehr viel geändert werden. Es kann instabil sein, etc.

Wenn Sie einfache asynchrone Operationen in Ihre Anwendung einführen möchten, würde ich Ihnen die Verwendung von Reactive Extensions und darauf aufbauendem Material (Reactive UI usw.) empfehlen, es ist einfach nur schön.

Was VS2012 anbelangt, enthält es, soweit ich mich erinnere, das gleiche Async-CTP, das ich von meinem // Build/Tablet-MS auf dieser Konferenz erhalten habe.

2
Alexey Raga