Je commence actuellement à créer une application qui profiterait beaucoup de la fonctionnalité d'attente asynchrone de C # 5. Mais je ne sais pas quelle version de VS et du runtime asynchrone utiliser.
En regardant les graphiques de popularité des systèmes d'exploitation, je devrai prendre en charge Windows XP pendant environ trois ans. Il semble que .net 4.5 ne fonctionne que sur les nouvelles versions de Windows, je dois donc cibler .net 4.0. Les machines de développement utilisent Windows 7, donc l'utilisation d'une version plus récente de VS n'est pas un problème.
Maintenant, je dois d'abord choisir un compilateur pour faire cela:
- VS2010 avec AsyncCTP
- VS2012 Preview (et final une fois arrivé), définissant la cible sur .net 4.0
- Mono (On dirait que 2.12 a async-await, je préfère / suis habitué à VS sur MonoDevelop comme IDE)
Lequel a le moins de bogues de génération de code? En regardant le blog de Jon Skeet, l'aperçu VS2012 n'utilise jamais un générateur de code que le CTP.
Et surtout quel runtime utiliser?
VS2012 contient-il un runtime asynchrone redistribuable à utiliser avec .net 4?
J'ai réussi à compiler du code, avec l'aperçu, en référençant le runtime AsyncCTP. Mais comme le CTP a des conditions de licence étranges, cela ne semble pas être une bonne solution à long terme.
Ou devrais-je utiliser une implémentation tierce? Peut-être que mono en a un?
Pour distribuer la bibliothèque, je préfère simplement mettre la dll dans le même répertoire que l'application, au lieu d'une sorte d'installation.
J'aimerais aussi que mes binaires fonctionnent sans changements sur mono + Linux / MacOS. Ainsi, le runtime doit soit être compatible avec tout ce que mono (2.12 probablement) a intégré, soit permettre une utilisation sur des OS non Windows.
Réponses:
Microsoft a publié le pack de ciblage Async (Microsoft.Bcl.Async) via Nuget en remplacement de AsyncCTP.
Vous pouvez en savoir plus ici: http://blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable.aspx .
Vous pouvez consulter la version précédente ici: http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx .
Comme ce pack est officiellement pris en charge, je pense maintenant que la meilleure option pour cibler XP + async serait d'utiliser Visual Studio 2012 + C # 5 + Async Targeting Pack.
Si vous ressentez le besoin de cibler .NET 3.5, vous pouvez toujours utiliser (mon) AsyncBridge pour .NET 3.5 .
la source
Si vous êtes prêt à envisager d'autres langages .Net, F # peut résoudre votre problème. Il utilise l'expression de calcul async {} depuis des années et est rétrocompatible même avec .Net 2.0. La configuration minimale requise est Windows XP SP3. Le runtime peut être téléchargé ici .
la source
Il est possible d'utiliser la version bêta de VS 12 pour cibler .NET 4.0 en utilisant async / await.
Vous devez copier du code dans votre projet qui fournit les types sur lesquels le compilateur s'appuie.
Détails ici
Edit: nous avons pris cette technique et l'avons transformée en une bibliothèque open source appelée AsyncBridge: https://nuget.org/packages/AsyncBridge
la source
Si vous voulez pouvoir distribuer votre logiciel, je pense que la solution Mono est vraiment votre seule option pour le moment. Vous dites également que vous voulez que le résultat final s'exécute sur Mono sur Linux et OS X. Cibler Mono pour commencer semble être la solution naturelle.
Votre prochain problème est l'IDE. MonoDevelop fonctionnerait évidemment bien mais vous dites que vous préférez Visual Studio.
Greg Hurlman a créé un profil pour coder avec Mono 2.8 à partir de Visual Studio. Si vous faites un suivi avec lui, il pourra peut-être vous orienter dans la bonne direction pour développer contre Mono 2.11 / 2.12 dans Visual Studio.
Bien sûr, il existe également des Mono Tools pour Visual Studio qui est un produit commercial. Je suppose qu'il est toujours proposé par Xamarin .
Vous pourrez peut-être également exécuter les assemblys de profil 4.5 requis à partir de Mono au-dessus de .NET, mais je n'ai pas essayé cela. Le profil 4.5 est un super-ensemble strict de l'API 4.0. Peut-être essayer et faire un rapport.
EDIT: Il semble que vous pouvez peut-être utiliser le CTP Visual Studio Async en production maintenant
Voici ce qu'il dit sur la page de téléchargement :
la source
Async...Builder
et...Awaiter
) sont très difficiles à séparer du reste de mono. Actuellement, je cherche à réimplémenterAsyncCtpLibrary
, éventuellement en empruntant un peu à mono.AsyncCtpLibrary
ce qui concerne la redistribution , je sais que c'est possible en principe, mais pour l'un, la licence contient quelques clauses étranges. Mais mon principal problème ici est ce qui se passe à long terme. S'il n'est plus pris en charge et que personne n'a corrigé de bogue, cela pourrait être ennuyeux.Si vous souhaitez commencer à distribuer votre logiciel après la publication de MS C # 5.0, vous pouvez commencer à développer à l'aide d'AsycnCTP. Sinon, je ne vous recommanderais pas de l'utiliser, car ce n'est que du CTP, pas même une version bêta. Il peut être beaucoup changé près de la phase bêta et de la sortie. Cela peut être instable, etc.
Si vous souhaitez introduire des opérations asynchrones faciles dans votre application, je vous recommanderais d'utiliser des extensions réactives et des éléments construits sur le dessus (interface utilisateur réactive, etc.), c'est tout simplement magnifique.
Quant à VS2012, il contient également le même CTP Async autant que je me souvienne de mon // Build / tablet MS m'a donné lors de cette conférence.
la source