Я пытаюсь реализовать парадигму запроса/ответа для библиотеки Websocketsharp точно так же, как она работает для асинхронного поведения запроса/ответа HttpClient. Я пытаюсь добиться этого, используя асинхронный обратный вызов, как указано в приведенном ниже коде. Я попытался заставить событие обратного вызова OnMessage метода SendAsync ждать, пока сервер не отправит ответ. Я могу получить ответ в рамках метода SendAsync, но как только мы выходим из области действия SendAsync, он очищает значение ответа.
string clientResponse = null;
var response = Task.Run(() => objWSClient.SendAsync(stream, Convert.ToInt32(stream.Length), (async (completed) =>
{
if (completed)
{
clientResponse = await WSMessageSendSuccess(reqObject, callback);
// Websocket response is flushed to the console window, but when it leaves the scope, it doesn't hold the response out of the SendAsync() scope.
Console.WriteLine(clientResponse);
}
else
{
WSMessageSendFail(reqObject);
clientResponse = "Failure to send Message";
}
})));
while (response.Status != TaskStatus.RanToCompletion)
{
Task.Delay(10000).Wait();
}
response.Wait();
// As soon as we leave scope of WebSocket.SendAsync() method, it clears the client response variable value.
// variable name : clientResponse;, it also works same with static property/variable.
return clientResponse;