web-dev-qa-db-fra.com

mots clés async/wait non disponibles dans .net 4.0

J'aimerais utiliser async/wait en C # 4.0 et j'ai installé le paquet suivant:

http://www.nuget.org/packages/Microsoft.Bcl.Async/

Le problème est que je n'ai pas de mots clés asynchrones/wait disponibles.

J'utilise VS2010 avec SP1.

Merci.

24
Álvaro García

Vous n'allez pas obtenir une meilleure réponse que Jon Skeet .

La seule façon de procéder consiste à utiliser VS2012 avec Microsoft.Bcl.Async.

Il est très difficile de travailler avec VS2010 avec asyncawait. Il y avait un vieux paquet Async CTP (qui contenait de nombreux bogues qui n’avaient jamais été corrigés) et qui agissait comme un "complément"/"remplacement partiel" de VS2010. Cependant, ce package n'a jamais bien fonctionné avec les mises à jour de VS2010. Donc, vous devez d’abord trouver une version de l’un des anciens programmes d’installation CTP, jouer avec l’installation de mises à jour certaines VS, puis voir si le CTP fonctionne. Si vous avez déjà installé toutes vos mises à jour VS2010, aucune version du CTP ne fonctionnera. Je pense une fois que vous avez trouvé une situation de mise à jour dans laquelle vous pouvez installer un CTP fonctionnel, alors vous pouvez installer les autres mises à jour.

Après tout ce travail, vous aurez toujours une implémentation de async (et certainement pas optimisée).

_/Ou, vous pouvez faire ce que Jon Skeet a suggéré et télécharger la version gratuite de VS2012 Express avec Microsoft.Bcl.Async et bénéficier d'une solution entièrement prise en charge.

27
Stephen Cleary

Async/Await ont été introduits avec C# 5.0 et .NET Framework 4.5

plus d'informations ici:

Programmation asynchrone avec async et attente (C # et Visual Basic)

Programmation asynchrone en C # 5.0 utilisant async et wait

Si vous utilisez Framework 4 comme je le fais dans l’entreprise, vous pouvez utiliser d’autres solutions de contournement . Vous pouvez utiliser un package NuGet qui vous permet d’utiliser ces fonctionnalités.

Utilisation de async/wait sans .NET Framework 4.5

Installez-le simplement à partir du gestionnaire de paquets NuGet:

Package d'installation Microsoft.Bcl.Async

Extrait de Galerie NuGet :

Ce package permet aux projets Visual Studio 2012 d'utiliser les nouveaux mots-clés "async" et "wait". Ce package inclut également des méthodes d'extension basées sur les tâches qui permettent d'utiliser certaines des API asynchrones existantes avec les nouveaux mots-clés de langue. Les projets Windows Phone Silverlight 8 peuvent utiliser ce package pour accéder aux méthodes d’extension async pour les types de mise en réseau.

19
Carlos Landeras

J'ai écrit un plugin .NET 4.5 en utilisant async pour une application .NET 4.0, et à ma grande surprise, cela a fonctionné!

Je pense que cela a fonctionné parce que .NET 4.5 est installé, ce qui a remplacé le runtime .NET 4 par un nouveau, qui est utilisé à la fois pour .NET 4.0 et .NET 4.5. Ensuite, mon plugin a été chargé avec la réflexion en utilisant Assembly.Load(...) ou similaire. J'ai essayé à la fois async/await et Environment.CurrentManagedThreadId (une propriété .NET 4.5), et les deux ont fonctionné.

Ainsi, si l’installation de .NET 4.5 est une option (c’est-à-dire ne prenant pas en charge Windows XP), vous pouvez éventuellement utiliser un mélange en chargeant la partie .NET 4.5 d’une application par réflexion, en laissant éventuellement votre partie 4.5 implémenter une interface 4.0. Cependant, si vous écrivez vous-même l'application, une solution beaucoup plus simple consisterait à passer à .NET 4.5 pour l'ensemble du projet.

0
johv