gpt4 book ai didi

multithreading - 我的MessageWebSocket.OutputStream放置在哪里?

转载 作者:行者123 更新时间:2023-12-03 13:19:15 25 4
gpt4 key购买 nike

我正在努力找出MessageWebSocket.OutputStream的处置位置。

WebsocketManager():

public WebsocketManager()
{
baseInit();
}

baseInit():
private void baseInit()
{
messageWebsocket = new MessageWebSocket();
}

connect():
public async void connect(string token, IEventAggregator eventAggregator, EvaLogger evaLogger)
{
try
{
messageWebsocket.SetRequestHeader("iPlanetDirectoryPro", token);
_eventAggregator = eventAggregator;
_evaLogger = evaLogger;
_localDataManager = new SqliteLocalDataManager(_evaLogger, _eventAggregator);
messageWebsocket.MessageReceived += OnMessageReceived;
messageWebsocket.Closed += OnClosed;
messageWebsocket.Control.MessageType = SocketMessageType.Utf8;
await messageWebsocket.ConnectAsync(WSURI);
}
catch (Exception e)
{
_evaLogger.Error(e.Message, e);
}
}

requestChats():
public async void requestChats()
{
DataWriter dataWriter = new DataWriter(messageWebsocket.OutputStream);
dataWriter.WriteString(WebsocketRequestFactory.Create(SocketEventsEnm.GET_CHATS));
await SendData(dataWriter);
}

sendTextMessage():
public async void sendTextMessage(long chatId, string message)
{
DataWriter dataWriter = new DataWriter(messageWebsocket.OutputStream);
dataWriter.WriteString(WebsocketRequestFactory.Create(SocketEventsEnm.MESSAGE_OUT, chatId, message));
await SendData(dataWriter);
}

SendData():
private async Task SendData(DataWriter dataWriter)
{
try
{
_evaLogger.Info("Trying to send data...");
await dataWriter.StoreAsync();
_evaLogger.Info("Data was sent");
}
catch (Exception e)
{
_evaLogger.Error(e.Message, e);
}
}

一切都按预期进行,我可以毫无问题地调用 requestChats(),但是当我调用 sendTextMessage()时,我得到了 System.ObjectDisposedException。我也可以调用 requestChats()而不是 sendTextMessage()。但是,当我第二次调用这些方法之一后,我将得到 System.ObjectDisposedException

我很确定这是被处置的 MessageWebSocket.OutputStream,但我不知道它在哪里处置。但是,也许这是关于线程的事情,而不是关于处置的事情?

如果您需要任何其他信息,只需询问。我整天都在为这个问题而苦苦挣扎。

编辑1:

仍然无法找出问题所在。今天,我尝试了以下操作:
  • 将MessageWebSocket更改为ClientWebSocket:其他异常,但含义相同:The WebSocket is in an invalid state ('Closed')
  • 为WebSocket使用 session 变量。
  • 也没有解决问题

    我对每一个想法都很感激,即使这只是一个很小的想法...

    最佳答案

    我能够解决问题。在发送数据之前,我总是在创建一个新的DataWriter。现在,我只创建一个DataWriter,当将WebSocket连接到服务器时会初始化它。

    我想问题是,当数据写入器被垃圾收集器清理后,输出流就关闭了。 Imo数据写入器不应该具有那么大的功能,但这是我唯一的解释。

    关于multithreading - 我的MessageWebSocket.OutputStream放置在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39615970/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com