无法访问已处置的对象使用SignalR和Timer Manager

问题描述

我想让我的函数实时发送数据(每2秒或数据库表中发生一次更改),但是问题是我的以下代码中存在Exception keep appread。

异常详细信息为:

# Create a scrapy.Item class which will hold all the scraped data
class Quote(scrapy.Item):
    text = scrapy.Field()
    # any additional info you want to put in a quote...

class QuoteSpider(scrapy.Spider):
    ...

    def parse(self,response):
        quotes = response.css('div .quoteText::text').extract()
        for quote in quotes:
            if len(quote) > 10:
               # We return a Quote scrapy.Item instead of a string!
               yield Quote(text=quote)
'Cannot access a disposed object.

并且TimerManager代码

 public class MyHub : Hub
    {
        private readonly IRepository<MyTable,long> _repository;
        private readonly IUnitOfWorkManager _unitOfWorkManager;
        public HCHub(IUnitOfWorkManager unitOfWorkManager,IRepository<MyTable,long> repository)
        {
            _repository = repository;
            _unitOfWorkManager = unitOfWorkManager;

        }

        

        public  void Get(TestDto testDto)
        {
            try {
                using (var unitOfWork = _unitOfWorkManager.Begin())
                {
                    var result=  _repository.GetDbContext().Set<MyTable>()
               .Include(x => x.list)
               .ThenInclude(x => x.list2)
               .ThenInclude(x => x.obj).ToList();




                    new TimerManager(async () =>

                    await Clients.All.SendAsync("listen",result) //<====== in this Line the exception occured
                    
                    
                    );
                }
            }
            catch(Exception ex)
            {
                throw new UserFriendlyException(ex.InnerException.Message.ToString());
            }



        }

因此问题出在 Timer Manager myHub 中,或者我无法通过 TimerManager 模拟实时数据的方式?!

解决方法

一旦退出集线器方法,就不能保证可以访问Clients属性。如果要执行类似的操作,则应将IHubContext<THub>注入到Hubs构造函数中,并改用它。您可以在https://docs.microsoft.com/aspnet/core/signalr/hubcontext?view=aspnetcore-3.1#get-an-instance-of-ihubcontext

中了解有关IHubContext的更多信息

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...