我正在尝试使用 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");
}
}
异常详细信息:
此时无法启动异步操作。异步操作只能在异步处理程序或模块内启动,或者在页面生命周期中的某些事件期间启动。如果在执行页面时发生此异常,请确保该页面被标记为 。
堆栈跟踪:
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# 中的异步/等待模式。
我会尝试更换WebClient
with HttpClient
. The DownloadStringTaskAsync
是一种“补充”支持async
超过现有的EAP http://msdn.microsoft.com/en-us/library/ms228969.aspx方法,而 SignalR 所反对的是 EAP 方法。HttpClient
uses TAP http://msdn.microsoft.com/en-us/library/hh873175.aspx直接地。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)