Я написал класс, который должен обеспечивать базовое взаимодействие с сервером NodeJS. Этот класс также включает экземпляр TcpClient и работает асинхронно (такие методы, как BeginRead, BeginWrite, ...), поэтому многие функции принимают обратные вызовы (анонимную функцию с использованием lambda expr.) В качестве аргумента. Проблема начинается в этом сценарии (я пытаюсь проиллюстрировать в коде мира, подобном оригиналу).C# Странное поведение обратных вызовов делегатов
this._nodeJS.Send("DATA_TO_SEND", (Response) => {
Console.WriteLine(Response);
// Section1
this._nodeJS.Send("ANOTHER_DATA", (Response1) => {
Console.WriteLine(Response1);
});
});
Проблема возникает в section1. Когда он закомментирован, программа ведет себя так, как ожидалось. Ответ получен в Консоли. Когда он не прокомментирован, он начинает вести себя очень странно. Write to Console в разделе 1 не работает (во многих случаях) и, что важно, код ниже Console.WriteLine в этом разделе не выполняется, «поток» просто останавливается прямо перед командой. Я попытался отлаживать его, шаг за шагом, переменные в Разделе 1 правильно установлены, и когда я перехожу к следующей команде, отладка просто прекращается. Что-то не так с этим подходом? Есть ли какие-то вещи, о которых я должен знать?
Для лучшего воображения здесь приведен пример. Я подключаюсь к серверу NodeJS, когда это делается, я отправляю запрос и жду ответа, содержащие данные, которые обрабатываются и снова отправляются на сервер NodeJS в следующем запросе (раздел 1). NodeJS дает мне окончательный ответ и работает программа ... Спасибо за любой совет!
Возможно, вы захотите избавиться от объекта '_nodeJS' после отправки и перед обратным вызовом или присвоить новое значение этой переменной? Попробуйте создать новый объект nodeJS внутри первого обратного вызова, который будет использоваться при отправке второго 'Send', по крайней мере для диагностики, если не в вашей окончательной программе. – Servy
Спасибо за быстрый ответ. Согласно моему исходному источнику, экземпляр NodeJS хранится в шаблоне реестра, поэтому есть только один экземпляр NodeJS. Когда я отлаживал его и входил в раздел1, каждая переменная имела правильное значение, каждый из них. –