Aufgabe & lt; & gt; enthält keine Definition für 'GetAwaiter'
Client
iGame Channel = new ChannelFactory<iGame> ( new BasicHttpBinding ( BasicHttpSecurityMode . None ) , new EndpointAddress ( new Uri ( "http://localhost:58597/Game.svc" ) ) ) . CreateChannel ( );
public Task<SerializableDynamicObject> Client ( SerializableDynamicObject Packet )
{
return Task<SerializableDynamicObject> . Factory . FromAsync ( Channel . BeginConnection , Channel . EndConnection , Packet , null );
}
Vertrag
[OperationContract ( AsyncPattern = true )]
IAsyncResult BeginConnection ( SerializableDynamicObject Message , AsyncCallback Callback , object State );
SerializableDynamicObject EndConnection ( IAsyncResult Result );
Service
public IAsyncResult BeginConnection ( SerializableDynamicObject Message , AsyncCallback Callback , object State )
{
dynamic Request = Message;
dynamic Response = new SerializableDynamicObject ( );
if ( Request . Operation = "test" )
{
Response . Status = true;
}
Response . Status = false;
return new CompletedAsyncResult<SerializableDynamicObject> ( Response );
}
public SerializableDynamicObject EndConnection ( IAsyncResult Result )
{
return ( Result as CompletedAsyncResult<SerializableDynamicObject> ) . Data;
}
Aussetzen Service aus Silverlight-Client
private async void myButton ( object sender , RoutedEventArgs e )
{
dynamic Request = new SerializableDynamicObject ( );
Request . Operation = "test";
var task = Client ( Request );
var result = await task; //<------------------------------ Exception
}
Ausnahme
Task<SerializableDynamicObject > does not contain a definition for 'GetAwaiter'
Was's falsch ?
Edit 1 :
Kurz,
Visual studio 2012 RC Silverlight 5 Anwendung verbraucht Spiel WCF 4 Service gehostet in ASP.net 4 Anwendung mit ChannelFactory-Technik über eine Gemeinsame Tragbare Bibliothek .NET4/SL5 enthält die iGame Schnittstelle mit Async CTP
Grafik :
ASP.NET <= Class Library ( Spiel ) <= Tragbare Bibliothek ( iGame ) => Silverlight
Edit 2 :
- Microsoft.CompilerServices.AsyncTargetingPack.Silverlight5.dll Hinzugefügt in meine SL5 Client
- mit System . Threading . Aufgaben;
InformationsquelleAutor der Frage Ahmed Ghoneim | 2012-08-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
GetAwaiter()
verwendet wird, durchawait
ist implementiert als eine Erweiterung Methode in die Async CTP. Ich bin mir nicht sicher, was genau du (Sie schweigen beide die Async CTP und VS 2012 RC in deiner Frage), aber es ist möglich, die Async targeting pack verwendet die gleiche Technik.Das problem ist dann, dass die Erweiterung Methoden funktionieren nicht mit
dynamic
. Was Sie tun können, ist, explizit angeben, dass Sie arbeiten mit einerTask
was bedeutet, dass die extension-Methode funktioniert, und wechseln Sie dann zurück zudynamic
:Oder, da die
Client()
Methode ist eigentlich nicht dynamisch, man könnte es mitSerializableDynamicObject
nichtdynamic
und so beschränken die Verwendungdynamic
so viel wie möglich:InformationsquelleAutor der Antwort svick
Ich hatte dieses Problem in einem meiner Projekte, wo ich fand, dass ich hatte mein Vorhaben
.net
version 4.0 und asynchrone Aufgaben werden nur unterstützt, in.net
4.5 auf den Stationen.Ich einfach geändert, mein Projekt-Einstellungen zu verwenden
.net
4.5 oder höher, und es funktionierte.InformationsquelleAutor der Antwort Zapnologica
Haben Sie die Installation Microsoft.Bcl.Async NuGet-Paket nutzen zu können
async/await
Konstrukte in pre-.NET 4.5 Versionen (wie Silverlight 4.0+)Nur zur Verdeutlichung - dieses Paket verwendet, um aufgerufen werden
Microsoft.CompilerServices.AsyncTargetingPack
und einige alte tutorials noch finden.Werfen Sie einen Blick hier für die info von Immo Landwerth.
InformationsquelleAutor der Antwort Pawel Hofman
Erlebt haben, dies in einer Methode, die ausgeführt wird, eine linq-Abfrage.
Benötigt
.FirstOrDefaultAsync()
statt. N00b Fehler.InformationsquelleAutor der Antwort JOpuckman
Hatte ich dieses problem nicht, da war ich eine Methode aufrufen
aber ich war Einstellung myString mit
führte im Ergebnis zu einem
dynamic
geben, nicht einestring
so, wenn ich versuchte zu erwarten aufmyClass.myStaticMethod(myString)
der compiler dachte ich aufrufen sollmyClass.myStaticMethod(dynamic myString)
. Dieses zusammengestellt in Ordnung, weil, wieder, in einem dynamischen Kontext, es ist alles gut, bis es explodiert in run-time, das ist, was passiert ist, weil es keine Implementierung der dynamischen versionmyStaticMethod
und diese Fehlermeldung wird nicht helfen, zu löschen, und die Tatsache, dass Intellisense mich nehmen würde, um die korrekte definition hat auch nicht geholfen.Tricky!
Jedoch durch das erzwingen der Ergebnis-Typ string, wie:
zu
mein Aufruf
myStaticMethod
korrekt verteiltInformationsquelleAutor der Antwort Sean
InformationsquelleAutor der Antwort Ponnuru Sivavaraprasad