web-dev-qa-db-fra.com

Utilisation de async-wait sur .net 4

Je commence actuellement à créer une application qui tirerait beaucoup profit de la fonction asynchrone de C # 5. Mais je ne sais pas quelle version de VS et du runtime async utiliser.

Si je regarde les tableaux 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 versions les plus récentes de Windows. Je dois donc cibler. net 4.0 Les machines de développement utilisent Windows 7, l’utilisation d’une version plus récente de VS n’est donc pas un problème.

Maintenant, je dois d'abord choisir un compilateur pour faire ceci:

  • VS2010 avec AsyncCTP
  • Aperçu VS2012 (et final une fois arrivé), définissant la cible sur .net 4.0
  • Mono (on dirait que 2.12 a async-wait, je préfère/suis habitué à VS sur MonoDevelop comme IDE)

Lequel a moins de bugs code-gen? En regardant blog de Jon Skeet , le VS2012 Preview utilise un générateur de code jamais que le CTP.

Et surtout quel runtime utiliser?

VS2012 contient-il un environnement d’exécution asynchrone redistribuable à utiliser avec .net 4?

J'ai réussi à compiler le 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 fichiers binaires fonctionnent sans modifications sous mono + Linux/MacOS. Donc, le runtime doit être compatible avec tout ce que mono (2.12 probablement) a intégré, ou permettre son utilisation sur des systèmes d'exploitation autres que Windows.

137
CodesInChaos

Microsoft a publié le Async Targeting Pack (Microsoft.Bcl.Async) à travers Nuget en remplacement de AsyncCTP.

Vous pouvez en savoir plus à ce sujet ici: http://blogs.msdn.com/b/bclteam/archive/2013/04/17/Microsoft-bcl-async-is-now-stable.aspx .

Vous pouvez lire à propos de la version précédente ici: http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx .

Ce pack étant officiellement pris en charge, je pense maintenant que la meilleure option de ciblage XP + async serait d’utiliser Visual Studio 2012 + C # 5 + Async Targeting Pack.

Si vous sentez cependant le besoin de cibler .NET 3.5, vous pouvez toujours utiliser (my) AsyncBridge for .NET 3.5 .

106
Omer Mor

Si vous êtes prêt à envisager d'autres langues .Net, F # peut résoudre votre problème. Il possède 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 moteur d’exécution peut être téléchargé ici .

24
Marc Sigrist

Si vous souhaitez pouvoir distribuer votre logiciel, je pense que la solution Mono est vraiment votre seule option pour le moment. Vous dites également que vous souhaitez que le résultat final s'exécute sous Mono sous Linux et OS X. Le ciblage à l'origine pour Mono semble être la solution naturelle.

Votre prochain numéro est l'IDE. MonoDevelop fonctionnerait évidemment bien, mais vous dites que vous préférez Visual Studio.

Greg Hurlman créé un profil pour coder contre 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 y a aussi Mono Tools for Visual Studio qui est un produit commercial. Je suppose qu’il est toujours proposé par Xamarin .

Vous pourriez également être en mesure d'exécuter les assemblys de profil 4.5 requis à partir de Mono sur .NET, mais je n'ai pas essayé. Le profil 4.5 est un super-ensemble strict de l'API 4.0. Peut-être tenter le coup et faire rapport.

EDIT: Il semble que vous puissiez utiliser le CTP Visual Studio Async en production maintenant

Voici ce qui est écrit sur le page de téléchargement :

Inclut un nouveau CLUF pour une utilisation en production. Remarque - Cette licence ne constitue en aucun cas un encouragement pour vous à utiliser le CTP pour votre code de production. Le CTP reste un aperçu technologique non pris en charge et à utiliser à vos risques et périls. Cependant, de nombreux développeurs nous ont demandé d’utiliser le CTP pour le code de production et nous avons donc modifié la licence pour l’autoriser.

3
Justin

Il est possible d’utiliser la version bêta du VS 12 pour cibler .NET 4.0 à l’aide de async/wait.

Vous devez copier du code dans votre projet qui fournit les types sur lesquels repose le compilateur.

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

3
Alex Davies

Si vous souhaitez commencer à distribuer votre logiciel après la publication de la version 5.0 de C # 5.0 par MS, vous pouvez commencer à développer à l'aide d'AsycnCTP. Sinon, je ne vous recommanderais pas de l'utiliser, car il s'agit simplement de CTP, pas même d'une version bêta. Cela peut être changé beaucoup près de la phase bêta et de la sortie. Il peut être instable, etc.

Si vous souhaitez introduire des opérations asynchrones faciles dans votre application, je vous recommanderais d'utiliser les extensions réactives et les é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 m'en souvienne, de mon // Build/tablet MS que m'avait donné la conférence.

2
Alexey Raga