小编Adr*_* So的帖子

SignalR - 如何在集线器中执行异步任务?

我正在尝试使用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");
    }
}
Run Code Online (Sandbox Code Playgroud)

例外细节:

此时无法启动异步操作.异步操作只能在异步处理程序或模块中启动,或者在页面生命周期中的某些事件中启动.如果在执行页面时发生此异常,请确保将页面标记为<%@ 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)
Run Code Online (Sandbox Code Playgroud)

在客户端,Javascript看起来像这样.

$.connection.hub.start().done(function () {
    $('#google').click(function () {
        var google = sample.server.getGoogle();
        console.log(google);
    });
});
Run Code Online (Sandbox Code Playgroud)

我做错了什么?有没有解决方法?我真的很想坚持使用C#中的异步/等待模式,如果可能的话.

c# async-await signalr signalr-hub

8
推荐指数
1
解决办法
5260
查看次数

标签 统计

async-await ×1

c# ×1

signalr ×1

signalr-hub ×1