簡體   English   中英

SignalR Core 拋出已處理的異常

[英]SignalR Core throws disposed exception

我有一個集線器,它的設置如下:

public class MainHub : Hub<IMainHub>
{
    private readonly IJobManager jobManager;

    public MainHub(
        IJobManager jobManager)
    {
        this.jobManager = jobManager;

        this.jobManager.JobUpdated += async (s, e) =>
        {
            await Clients.Group(e.Group).JobUpdate(e.Job);
        };
    }
]

IJobManager是一個類,它使用SqlDependency來監視表上的更改並注冊為單例。 當未訂閱JobUpdated事件(或未觸發事件)時,集線器工作正常。

但是當事件被觸發時,我得到以下異常:

無法訪問已處置的對象。 對象名稱:'MainHub'。

為什么會出現這個錯誤?

如果我交換 DI 將集線器注入作業管理器(因為這個類是單例),我假設集線器不會被處理。

看起來您的問題是當MainHub完成它的工作時,您沒有取消注冊事件偵聽器。 你無法控制那個實例的一個實例存活多久......

不要使用匿名函數並取消注冊事件偵聽器。

public class MainHub : Hub<IMainHub>
{
    private readonly IJobManager jobManager;

    public MainHub(
        IJobManager jobManager)
    {
        this.jobManager = jobManager;

        this.jobManager.JobUpdated += OnJobUpdated;
    }

    private async void OnJobUpdated(object s, Event e)
    {
       await Clients.Group(e.Group).JobUpdate(e.Job);
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing) {
          this.jobManager.JobUpdated -= OnJobUpdated;
        }
        base.Dispose(disposing);
    }
}

您需要在那里修復函數的簽名,因為我不知道真正的簽名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM