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 是一个 class,它使用 SqlDependency 来监视 table 上的更改,并注册为单例。集线器在未订阅 JobUpdated 事件(或事件未触发)时工作正常。

但是当事件被触发时,我得到以下异常:

Cannot access a disposed object. Object name: 'MainHub'.

为什么会出现这个错误?

如果我交换 DI,我将 hub 注入到作业管理器中(因为这个 class 是一个单例),我假设 hub 不会被释放。

看起来你的问题是当 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);
    }
}

你需要修复那里的函数签名,因为我不知道真正的签名。