繁体   English   中英

.NET Core SocketIO-无法访问已处置的对象

[英].NET Core SocketIO - Cannot access disposed object

我使用SocketIOClientDotNet从流中获取数据( https://github.com/Quobject/SocketIoClientDotNet ),然后将这些数据保存到数据库中;

private readonly DataContext _context;

public SocketIo(DataContext context)
{
    this._context = context;
}

public void SocketStart()
{
    var socket = IO.Socket("myip");

    socket.On("xx", async (data) =>
        {                                                              
            var test = await Update(data.ToString());
        });
}

public async Task<SocketPrice> Update(string data)
{
    SocketPrice socketStream = JsonConvert.DeserializeObject<SocketPrice>(data);

    SocketPrice socketDB = await _context.SocketPrices.Where(s => s.Id == socketStream.Id).FirstOrDefaultAsync();
    socketDB.value = socketStream.value;

    await _context.SaveChangesAsync();   

    return socketDB;
}

从启动运行时;

在配置服务中; services.AddScoped<ISocketIoService, SocketIo>();

并在配置中; socket.SocketStart();

我收到错误消息;

未处理的异常:System.ObjectDisposedException:无法访问已处置的对象。 导致此错误的常见原因是,处理从依赖项注入中解决的上下文,然后稍后尝试在应用程序中的其他位置使用相同的上下文实例。 如果您在上下文上调用Dispose()或将上下文包装在using语句中,则可能会发生这种情况。 如果使用依赖项注入,则应让依赖项注入容器处理处理上下文实例。

将方法更改为同步时,该方法会运行,但会在完成之前重新启动,因此结果不会保存到数据库中。 我如何更改此设置以将新的传入数据保存到数据库?

注入IServiceProvider 在需要时解析DataContext

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM