And*_*ens 1 signalr signalr.client
我正在使用.Net客户端(而不是javascript)学习SignalR,并希望澄清如何以同步或异步方式调用集线器代理方法.
没有返回值的方法
到目前为止,我一直在做这样的事情: -
myHubProxy.Invoke("DoSomething");
Run Code Online (Sandbox Code Playgroud)
我发现这是异步的,这很好,因为它实际上是"一劳永逸",并且不需要等待返回值.但有几个问题: -
带返回值的方法
到目前为止,我一直在使用该Result物业,例如: -
var returnValue = myHubProxy.Invoke<string>("DoSomething").Result;
Console.WriteLine(returnValue);
Run Code Online (Sandbox Code Playgroud)
我假设它同步工作 - 毕竟,在返回结果之前,它无法进入下一行.但是我如何异步调用这样的方法呢?是否有可能指定一个回调方法,或者我现在应该真的使用async/await(这是我承认还没有学到的东西)?
如果要编写异步代码,则应使用async/ await.我在我的博客上有一个介绍,最后有一些后续资源.
当您启动异步操作(例如,Invoke)时,您将获得一个任务.该Task类型用于没有返回值的异步操作,并Task<T>用于具有返回值的异步操作.这些任务类型可以在操作完成时指示您的代码,以及它是成功完成还是错误.
虽然你可以使用Task.Wait和Task<T>.Result,但我不推荐它们.首先,它们将任何异常包装在一起,AggregateException这使得您的错误处理代码更加繁琐.它使用起来容易得多await,而不是这种包装.同样,您可以使用注册回调ContinueWith,但我不推荐它; 你需要了解很多关于任务调度程序以及正确使用它的东西.它更容易使用await,默认情况下(最可能)正确的做法.
| 归档时间: |
|
| 查看次数: |
7985 次 |
| 最近记录: |