[英]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.