我正在尝试使用C#5 async / await功能创建SignalR应用程序,但每当代码运行时,它都会抛出System.InvalidOperationException。这是重现问题的最简单的代码。
public class SampleHub : Hub
{
public Task<string> GetGoogle()
{
var http = new WebClient();
return http.DownloadStringTaskAsync("http://www.google.com");
}
}
异常详情:
此时无法启动异步操作。异步操作只能在异步处理程序或模块中启动,或者在页面生命周期中的某些事件中启动。如果在执行页面时发生此异常,请确保将页面标记为&lt;%@ Page Async = \“true \”%&gt;。
堆栈追踪:
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 / await模式,如果可能的话。