2013-04-18 5 views
10

Ich gehe durch dieses Tutorial zur asynchronen Programmierung in C# und bin auf einen Fehler gestoßen, ich bin mir nicht sicher, wie zu lösen. Hier ist der Link: http://msdn.microsoft.com/en-us/library/hh191443.aspx und der Fehler ist:Asynchrone Programmierung mit Async und erwarte

Cannot find all types required by the 'async' modifier. 
Are you targeting the wrong framework version, or missing a reference to an assembly? 

ich das .NET 4.0 Framework bin Targeting und bin nicht sicher, alle weiteren Baugruppen erforderlich. Hier

ist der Code:

public async Task<string> AccessTheWebAsync(Class1 class1, Class2 class2) 
{ 
    // GetStringAsync returns a Task<string>. That means that when you await the 
    // task you'll get a List<string> (urlContents). 
    Task<string[]> listTask = GetList(class1); 

    // send message task 

    // You can do work here that doesn't rely on the string from GetStringAsync. 
    //CompareService(); 

    // The await operator suspends AccessTheWebAsync. 
    // - AccessTheWebAsync can't continue until getStringTask is complete. 
    // - Meanwhile, control returns to the caller of AccessTheWebAsync. 
    // - Control resumes here when getStringTask is complete. 
    // - The await operator then retrieves the string result from getStringTask. 
    string[] listContents = await listTask; 

    // The return statement specifies an integer result. 
    // Any methods that are awaiting AccessTheWebAsync retrieve the length value. 
    return listContents; 
} 

public Task<string[]> GetList(Class1 class1) 
{ 
    var taskArray = Task<string[]>.Factory.StartNew(() => GenerateResults(class1)); 
    return taskArray; 
} 
public string[] GenerateResults(Class1 class1) 
{ 
    string[] results = new string[2]; 
    results[1] = ""; 
    results[2] = ""; 
    return results; 
} 
+2

Asynchron - erwarten ist von .NET Framework 4.5, nicht 4 –

+2

@CuongLe, 'async/await' ist von' C# -5.0' aber ich benutze es in .NET 4.0 installiert haben 'Async CTP' b/c Ich kann .NET-4.5 (oder VS2012) nicht unter Windows XP (VS2010) installieren. Stellen Sie sich die Erweiterung als echte .NET-4.0 vor, nicht die, die nur mit .NET-4.5 kommt. –

Antwort

2

Um Asynchron mit NET 4.0 lesen Sie diesen Artikel zu verwenden: http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx.

+2

Zusammenfassend: Installieren Sie das 'Microsoft.Bcl.Async' NuGet-Paket. Es ist ein Vorabversionspaket. –

+1

Es sei denn, Sie sind auf Windows XP (oder VS2010), wo Nuget .NET-4.5-Pakete inkompatibel mit .NET 4.0 bringt, das auf Maschine ohne .NET-4.5 (anders ausgedrückt, .NET 4.0 auf Maschine mit .NET 4.5 ist anders von .NET 4.0 auf Maschine ohne .NET 4.5). Auf echten .NET-4.0 [erhalten Sie Async CTP + andere Erweiterungen] (http://stackoverflow.com/a/15972581/200449) ohne Nuget –

6

ich den .NET 4.0 Framework bin Targeting und bin nicht sicher, irgendwelche zusätzlichen Baugruppen erforderlich

Es ist möglich, async/await Code in .NET 4.0 ohne isntalling .NET 4.5, having included or referenced AsyncCtpLibrary.dll from Async CTP zu laufen. Es ist unmöglich, .NET 4.5 oder Visual Studio 2012 unter Windows XP und .NET 4.0 zu installieren, ohne dass sich .NET 4.5 von .NET 4.0 mit installierter .NET 4.5 unterscheidet.
lesen, zum Beispiel, diese Diskussion:

ich abraten für das Erhalten Erweiterungen für .NET 4.0 und .NET 4.5 Nuget auf der Maschine zu verwenden, wie es wirklich bringt kompatibel Pack entweder für falsch .NET 4.5 oder für .NET 4.0 von .NET 4.5 nicht kompatibel mit .NET 4.0 und .NET 4.5

Aber Ihr Code hat einen Syntaxfehler

Sie sollten Rückgabetyp Task<string[]>, statt Ihrer Task<string>, in AccessTheWebAsync() Methodendeklaration haben, dh Sie geschrieben haben sollte:

public async Task<string[]> AccessTheWebAsync(Class1 class1, Class2 class2)() 

statt

public async Task<string> AccessTheWebAsync(Class1 class1, Class2 class2)() 

um für diese Methode Rückgabewerte vom Typ string[]:

return listContents;//where listContents is declared as string[] type 

Update:
Karo, dass OP Code nach dieser Korrektur laufen auf meinem true .NET 4.0 (without .NET 4.5 and VS2012) Windows XP machine with Async CTP

Warum wurde meine Antwort downvoted? anonymous ...

Es ist offensichtlich, dass wenn OP solche Frage stellt, dass er .NET 4.5 nicht installiert hat. Er wird Async Targeting Pack Referenzieren "Async for .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5 and 8 1.0.16" ohne Installation von VS2012 nicht verwenden können, und letzteres ist einfach unmöglich auf Wondows XP, mit Nuget bringen falsche Packs in VS2010 inkompatibel und unmöglich auf .NET 4.0 ohne .NET 4 zu verwenden.5 installiert

Karo es oft, im Mai Kontexten

3

Suche nach async in NuGet Manager und installieren Microsoft Async zum Ausführen async/await Code in

Verwandte Themen