SignalR - Wie führe ich eine asynchrone Task im Hub aus?

8

Ich versuche, eine SignalR-Anwendung mithilfe der C # 5-async / await-Funktionen zu erstellen, aber wenn der Code ausgeführt wird, wird eine System.InvalidOperationException ausgelöst. Hier ist der einfachste Code, um das Problem zu reproduzieren.

%Vor%

Ausnahmedetails:

  

Eine asynchrone Operation kann zu diesem Zeitpunkt nicht gestartet werden. Asynchrone Operationen können nur innerhalb eines asynchronen Handlers oder Moduls oder während bestimmter Ereignisse im Seitenlebenszyklus gestartet werden. Wenn diese Ausnahmebedingung beim Ausführen einer Page aufgetreten ist, stellen Sie sicher, dass die Seite als & lt;% @ Page Async = \ "true \"% & gt;.

markiert ist

Stapelverfolgung:

%Vor%

Auf der Client-Seite sieht das Javascript so aus.

%Vor%

Was habe ich falsch gemacht? Gibt es Workarounds? Ich bin sehr daran interessiert, wenn überhaupt, bei den async / await-Mustern in C # zu bleiben.

    
Adrian So 06.05.2013, 10:56
quelle

1 Antwort

10

Ich würde versuchen, WebClient durch HttpClient zu ersetzen. Der DownloadStringTaskAsync ist eine Art "bolt-on" Unterstützung für async über die bestehende EAP Methoden, und gegen die EAP-Methoden wendet sich SignalR. HttpClient verwendet TAP direkt.

    
Stephen Cleary 06.05.2013, 20:21
quelle