2013-10-17 12 views
19

würde Ich mag die verwenden async/await in C# 4.0 und ich habe das folgende Paket installiert:async/erwarten Schlüsselwörter nicht in .net 4.0

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

Das Problem ist, dass ich nicht habe async/warten auf verfügbare Schlüsselwörter.

Ich verwende VS2010 mit SP1.

Danke.

+1

Diese Schlüsselwörter sind neu in C# 5.0. – Steven

+8

Warum haben Sie eine neue Frage dafür erstellt? Ich habe bereits erklärt, was das Problem ist: Visual Studio muss darüber auf einer Sprachebene wissen. VS2010 unterstützt nur C# 4, nicht C# 5. Entweder müssen Sie das alte CTP installieren (eine schlechte Idee IMO) oder Visual Studio 2012 oder 2013 verwenden. –

+0

mögliches Duplikat von [welche Bibliothek (welchen Unterschied) kann async in .net verwenden 4.0?] (Http://stackoverflow.com/questions/19421878/which-library-which-difference-to-can-use-async-in-net-4-0) – svick

Antwort

24

Sie werden keine bessere Antwort als Jon Skeet's bekommen.

Die einzige unterstützte Methode ist die Verwendung von VS2012 mit Microsoft.Bcl.Async.

VS2010 ist sehr schwer zu arbeiten mit async/await. Es gab ein altes Async-CTP-Paket (das viele Fehler hatte, die nie behoben wurden), die VS2010 als "Add-on"/"teilweiser Ersatz" galten. Dieses Paket hat jedoch mit den VS2010-Updates nie gut funktioniert. Also, Sie müssten zuerst eine Version eines der alten CTP-Installer finden, herumspielen mit der Installation einige VS Updates, und dann sehen, ob das CTP funktioniert. Wenn Sie bereits alle VS2010-Updates installiert haben, funktioniert keine Version des CTP. I denken Sobald Sie eine Update-Situation finden, wo Sie eine funktionierende CTP installieren können, dann können Sie die anderen Updates installieren.

Nach all dieser Arbeit werden Sie immer noch mit einer fehlerbehafteten (und definitiv nicht optimierten) Implementierung von async enden.

Oder, können Sie tun, wie Jon Skeet vorgeschlagen und laden Sie die kostenlose Version von VS2012 Express mit Microsoft.Bcl.Async und haben eine vollständig unterstützte Lösung.

17

Async/Await haben mit C# 5.0 und .NET Framework 4.5

mehr Informationen hier eingeführt:

Asynchronous Programming with Async and Await (C# and Visual Basic)

Asynchronous Programming in C# 5.0 using async and await

Wenn Sie mit Framework 4 wie ich in Unternehmen tun können, die Sie verwenden andere Problemumgehungen. Sie können ein NuGet-Paket verwenden, mit dem Sie diese Funktionen verwenden können.

Using async/await without .NET Framework 4.5

Einfach installieren von NuGet Paket-Manager:

Install-Package Microsoft.Bcl.Async

von NuGet Gallery Extrahiert:

Dieses Paket ermöglicht Visual Studio 2012-Projekte zur Verwendung der neuen 'async' und 'erwarten' Keywords. Dieses Paket enthält auch aufgabenbasierte Erweiterungsmethoden, die die Verwendung einiger der vorhandenen asynchronen APIs mit den neuen Sprachschlüsselwörtern ermöglichen. Windows Phone Silverlight 8-Projekte können dieses Paket verwenden, um auf asynchrone Erweiterungsmethoden für die Netzwerktypen zuzugreifen.

0

Ich habe ein .NET 4.5-Plugin mit async für eine .NET 4.0-Anwendung geschrieben, und zu meiner Überraschung funktionierte dies tatsächlich!

Ich denke, das funktionierte, weil ich .NET 4.5 installiert habe, die die .NET 4-Laufzeitumgebung durch eine aktualisierte ersetzt, die sowohl für .NET 4.0 als auch für .NET 4.5 verwendet wird. Dann wurde mein Plugin unter Verwendung von Assembly.Load(...) oder ähnlichem mit Reflektion geladen. Ich probierte sowohl async/await als auch Environment.CurrentManagedThreadId (eine .NET 4.5-Eigenschaft), und beide funktionierten.

Also, wenn die Installation von .NET 4.5 eine Option ist (d. H. Keine Unterstützung von Windows XP), könnte man einen Mix verwenden, indem man den .NET 4.5 Teil einer Anwendung per Reflektion lädt und eventuell eine 4.0 Schnittstelle implementiert. Wenn Sie die Anwendung jedoch selbst schreiben, wäre eine viel einfachere Lösung, für das gesamte Projekt auf .NET 4.5 zu wechseln.