Ich beginne derzeit mit der Erstellung einer Anwendung, die von der asynchronen Wartefunktion von C # 5 sehr profitieren würde. Ich bin mir jedoch nicht sicher, welche Version von VS und der asynchronen Laufzeit verwendet werden soll.
Wenn ich mir die Beliebtheitstabellen des Betriebssystems anschaue, muss ich Windows XP noch etwa drei Jahre lang unterstützen. Es sieht so aus, als ob .net 4.5 nur unter neueren Windows-Versionen ausgeführt wird, daher muss ich auf .net 4.0 abzielen. Die Entwicklungsmaschinen verwenden Windows 7, daher ist die Verwendung einer neueren Version von VS kein Problem.
Jetzt muss ich zuerst einen Compiler auswählen, um dies zu tun:
- VS2010 mit AsyncCTP
- VS2012-Vorschau (und endgültig, sobald sie eintrifft), wobei das Ziel auf .net 4.0 festgelegt wird
- Mono (Sieht so aus, als hätte 2.12 asynchrones Warten, ich bevorzuge / bin es gewohnt, VS gegenüber MonoDevelop als IDE zu verwenden)
Welches hat weniger Code-Gen-Fehler? Wenn Sie sich Jon Skeets Blog ansehen, 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 Laufzeit 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 seltsame Lizenzbedingungen hat, scheint dies keine gute langfristige Lösung zu sein.
Oder sollte ich eine Implementierung eines Drittanbieters verwenden? Vielleicht hat Mono einen?
Für die Verteilung der Bibliothek ziehe ich es vor, die DLL einfach im selben Verzeichnis wie die Anwendung abzulegen, anstatt eine 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 integrierten Mono (wahrscheinlich 2.12) kompatibel sein oder die Verwendung unter Nicht-Windows-Betriebssystemen ermöglichen.
Antworten:
Microsoft hat das Async Targeting Pack (Microsoft.Bcl.Async) über Nuget als Ersatz für AsyncCTP veröffentlicht.
Weitere Informationen finden Sie hier: http://blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable.aspx .
Informationen zur vorherigen Version finden Sie hier: http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx .
Da dieses Paket offiziell unterstützt wird, glaube ich jetzt, dass die beste Option für das Targeting von XP + Async die Verwendung von Visual Studio 2012 + C # 5 + Async Targeting Pack ist.
Wenn Sie jedoch das Ziel haben, auf .NET 3.5 abzuzielen , können Sie (meine) AsyncBridge für .NET 3.5 weiterhin verwenden .
quelle
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 hier heruntergeladen werden .
quelle
Es ist möglich, die Betaversion von VS 12 zu verwenden, um .NET 4.0 mit async / await als Ziel festzulegen.
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 übernommen und in eine Open-Source-Bibliothek namens AsyncBridge umgewandelt: https://nuget.org/packages/AsyncBridge
quelle
Wenn Sie Ihre Software vertreiben möchten, ist die Mono-Lösung meiner Meinung nach derzeit wirklich Ihre einzige Option. Sie sagen auch, dass das Endergebnis unter Mono über Linux und OS X ausgeführt werden soll. Die Ausrichtung auf Mono scheint zunächst die natürliche Lösung zu sein.
Ihre nächste Ausgabe ist die IDE. MonoDevelop würde natürlich gut funktionieren, aber Sie sagen, Sie bevorzugen Visual Studio.
Greg Hurlman hat aus Visual Studio ein Profil zum Codieren gegen Mono 2.8 erstellt. Wenn Sie mit ihm Kontakt aufnehmen, kann er Sie möglicherweise in die richtige Richtung für die Entwicklung gegen Mono 2.11 / 2.12 in Visual Studio weisen.
Natürlich gibt es auch Mono Tools für Visual Studio , ein kommerzielles Produkt. Ich gehe davon aus, dass es noch von Xamarin angeboten wird .
Möglicherweise können Sie auch die erforderlichen 4.5-Profilassemblys von Mono über .NET ausführen, aber das habe ich nicht versucht. Das 4.5-Profil ist eine strikte Obermenge der 4.0-API. Vielleicht probieren Sie es aus und melden Sie sich zurück.
BEARBEITEN: Es sieht so aus, als könnten Sie das Visual Studio Async CTP jetzt in der Produktion verwenden
Folgendes steht auf der Download-Seite :
quelle
Async...Builder
und...Awaiter
) sind sehr schwer vom Rest von Mono zu trennen. Derzeit beschäftige ich mich mit der NeuimplementierungAsyncCtpLibrary
und leihe möglicherweise etwas von Mono aus.AsyncCtpLibrary
weiß ich, dass dies grundsätzlich möglich ist, aber zum einen enthält die Lizenz einige seltsame Klauseln. Aber mein Hauptproblem hier ist, was auf lange Sicht passiert. Wenn es nicht mehr unterstützt wird und niemand Fehler darin behoben hat, kann dies ärgerlich sein.Wenn Sie mit der Verteilung Ihrer Software nach der Veröffentlichung von C # 5.0 durch MS beginnen möchten, können Sie mit der Entwicklung mit AsycnCTP beginnen. Andernfalls würde ich Ihnen nicht empfehlen, es zu verwenden, da es sich nur um CTP handelt, nicht einmal um eine Beta. Es kann sehr nahe an der Beta-Phase und an der Veröffentlichung geändert werden. Es kann instabil sein, etc.
Wenn Sie einfache asynchrone Vorgänge in Ihre Anwendung einführen möchten, würde ich Ihnen empfehlen, reaktive Erweiterungen und darauf aufgebaute Dinge (reaktive Benutzeroberfläche usw.) zu verwenden. Es ist einfach wunderschön.
VS2012 enthält, soweit ich mich erinnere, dasselbe Async-CTP, das ich von meiner // Build / Tablet-MS erhalten habe, die ich auf dieser Konferenz erhalten habe.
quelle