Я борюсь с шаблоном наблюдателя с пакетом NuGet websocket-client (https://github.com/Marfusios/websocket-client)
Соединение с сервером WebSocket стабильное и работает.
Каждый запрос имеет идентификатор запроса внутри полезной нагрузки. Клиент отправляет его на сервер, а сервер отвечает идентификатором и реальными данными.
На стороне клиента мне нужно назначить каждый ответ на соответствующий запрос.
Я думал, что могу сделать это так:
public Task<Data> GetDataAsync()
{
var webSocket = new WebsocketClient(Uri);
await webSocket.Start();
var requestId = Guid.NewGuid();
var tcs = new TaskCompletionSource<Data>();
var disposable = webSocket
.MessageReceived
.Where(message => message.Text.Contains(requestId))
.Subscribe(message=>
{
var data = ParseData(message.Text);
tcs.SetResult(data);
});
return tcs.Task;
}
Но на самом деле он никогда не переходит в метод подписки. Я использую это неправильно?