【问题标题】:SignalR dispose of HubConnectionSignalR 处理 HubConnection
【发布时间】:2015-09-17 15:54:52
【问题描述】:

在 AspNet SignalR 客户端中,是否需要处理 HubConnection 的操作?

据我所见,这似乎需要一些时间......

【问题讨论】:

    标签: asp.net .net dispose signalr.client signalr-2


    【解决方案1】:

    如果您拨打Stop(),则不需要。

    https://msdn.microsoft.com/en-us/library/dn235890(v=vs.118).aspx

    否则,您应该始终在使用完 IDisposable 对象后对其进行处置。

    如果花费的时间太长(即阻塞当前线程),只需在 Task 上停止它,类似于:

    Task.Run(()=>hubConnection.Stop());
    

    【讨论】:

    • 感谢您的回答。我不会打电话给stop(),因为它与Dispose() 完全相同。来自信号器源代码protected virtual void Dispose(bool disposing) { if (disposing) { Stop(); } }
    • 在单独的任务中处理连接可以解决问题,但这是一种常见的做法吗?
    • @cangosta,是的,如果您不想阻止它的处理,这很常见。
    • 这很痛苦但是:Task.Run(() => this.hubConnection.Dispose()).Wait(TimeSpan.FromSeconds(10));
    【解决方案2】:

    花费太多时间是什么意思?能详细点吗?您是否遇到超时异常?

    摘自《C# 5.0 in a Nutshell》一书:

    要遵循的安全规则(几乎在所有情况下)是“如有疑问,请丢弃”。 一次性物品——如果它会说话的话——会说:

    当你完成我的工作后,请告诉我。如果简单地放弃,我可能会 给其他对象实例、应用程序域、 计算机、网络或数据库!

    如果不是破坏交易,我会说 dispose。也可能有助于找出需要这么长时间的原因。

    【讨论】:

    • 其实只是阻塞了正在运行的线程,然后就成功结束了。不抛出异常。我不明白为什么要花这么多时间来处理。
    • 处理对象需要 30 秒
    • 其实30秒是dispose操作的默认超时时间。
    猜你喜欢
    • 1970-01-01
    • 2012-09-21
    • 2017-04-14
    • 1970-01-01
    • 2021-12-06
    • 2017-11-18
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多