C#5の非同期/待機機能を使用してSignalRアプリケーションを作成しようとしていますが、コードを実行するたびにSystem.InvalidOperationExceptionがスローされます。問題を再現するための最も簡単なコードは次のとおりです。SignalR - ハブで非同期タスクを実行する方法?
public class SampleHub : Hub
{
public Task<string> GetGoogle()
{
var http = new WebClient();
return http.DownloadStringTaskAsync("http://www.google.com");
}
}
例外の詳細:
非同期操作は、この時点で開始することはできません。非同期操作は、非同期ハンドラまたはモジュール内、またはページライフサイクルの特定のイベント中にのみ開始できます。ページの実行中にこの例外が発生した場合は、Pageが<%@ Page Async = \ "true \"%>とマークされていることを確認してください。
スタックトレース:クライアント側で
at System.Web.AspNetSynchronizationContext.OperationStarted()
at System.Net.WebClient.DownloadStringAsync(Uri address, Object userToken)
at System.Net.WebClient.DownloadStringTaskAsync(Uri address)
at System.Net.WebClient.DownloadStringTaskAsync(String address)
、Javascriptがこのようになります。
$.connection.hub.start().done(function() {
$('#google').click(function() {
var google = sample.server.getGoogle();
console.log(google);
});
});
どうしたのですか?回避策はありますか?可能であれば、C#の非同期/待機パターンに固執することが本当に熱心です。
メソッド名の前にキーワードasyncを追加して、GetGoogleメソッドの非同期化を試みましたか? –
はい、私はそれを試して、それは動作しませんでした。ついにスティーブンの答えが私の問題を解決しました。 –