2013-03-22 4 views
13

Ich versuche, eine asynchrone Operation in einer Funktion auszuführen, die eine Zeichenfolge zurückgibt.Erwarte/asynchrone Referenzfehler

Aber es gibt mir Fehler auf jeder Zeichenfolge enthält Wörter async/erwarten! Im Verwenden der russischen Version von ms vs express 2012 für Windows-Desktop, so hier ist die Übersetzung von Fehlern:

Kann nicht alle Typen von der 'async' Modifikator erforderlich finden. Richten Sie die falsche Framework-Version oder einen Verweis auf eine Assembly aus?

Und 2 Fehler:

Vordefinierte Typ 'System.Runtime.CompilerServices.IAsyncStateMachine' ist nicht

definiert oder importiert ich diese Referenz finden kann nicht. Ich habe versucht, async/warte vorher und es hat gut funktioniert, jetzt mache ich das gleiche und es nicht. Was ich vermisse?

+0

Ich kann Ihnen Copy-Pasted-Fehler in russischer Sprache geben, werden sie Ihnen helfen? –

+1

Verwenden Sie Framework 4.5? –

+0

ja, Framework 4.5 –

Antwort

16
  • In thr_calc verwenden:

    return zzztest() 
    
  • Also, stellen Sie sicher, dass Sie Ihr Projekt verwenden .Net 4.5 oder höher festgelegt haben (das ist, wenn "async" eingeführt wurde)

+0

ja aber Fehler die gleichen –

+3

Das ist seltsam, weil es für mich kompiliert. Haben Sie unter den Projekteigenschaften unter "Anwendung" überprüft, dass das Framework 4.5 ist? – redtuna

+0

(Nun, es kompiliert, sobald ich Asd einen Wert zuweisen, aber ich bin sicher, Sie hätten kein Problem, die Kompilierung Fehler beheben) – redtuna

1

Wenn zzztest ein langer laufender Betrieb ist, können Sie dies tun, es in einem Hintergrund-Thread ausgeführt wird:

async private Task<string> thr_calc(object sender, EventArgs e) 
{ 
    return await Task.Run<string>(() => zzztest());    
} 

Das oben genannte sollte Ihre Kompilierungsfehler ebenso lösen.

Wenn zzztest KEIN langwieriger Betrieb ist, sollten Sie NICHT await/async verwenden.

7

Bei einem .NET 4.0-Projekt habe ich 'Predefined type' System.Runtime.CompilerServices.IAsyncStateMachine 'nicht definiert oder importiert', indem ich das Microsoft.Bcl.Async-Paket von nuget installiere. Suchen Sie in dem nuget-Paketmanager von VS nach "bcl" und installieren Sie den asynchronen Paketmanager.