Просто предшественник, этот сервер веб-сокетов использует Flec, насколько я понимаю, .OnBinary()
просто выполняется, когда двоичные данные отправляются клиентом, и .OnMessage()
просто выполняется, когда текстовые данные отправляются клиентом.
По сути, клиент отправляет исходное текстовое сообщение в веб-сокет, а затем записывает все последующие данные в веб-сокет в виде двоичного потока из 640-байтовых сообщений. Я пытаюсь await
a Task<>
в методе .OnBinary()
, однако, по некоторым причинам, код, кажется, не выполняется должным образом. Кажется, что последующие строки кода в методе .OnBinary()
также не выполняются. Как ни странно, все работает отлично, если использовать метод .OnMessage()
. Это заставляет меня поверить, что из-за того, что мой клиент вызывает .OnMessage()
только один раз, и он запускает .OnBinary
много раз в секунду, код «выходит из строя», и Task<>
не ожидается. У меня нет объяснения этому, и это кажется нелогичным. Тем не менее, проблема присутствует, и я надеялся, что кто-нибудь узнает обойти это. Пример ниже:
socket.OnMessage = async message =>
{
MySynchronousMethod(); // This line executes once
};
socket.OnBinary = async binary =>
{
MySynchronousMethod(); // This line executes many times a second
};
socket.OnMessage = async message =>
{
await streamingCall.WriteAsync(); // awaits a Task<>
MySynchronousMethod(); // This line DOES execute
};
socket.OnBinary = async binary =>
{
await streamingCall.WriteAsync(); // awaits a Task<>
MySynchronousMethod(); // This line DOES NOT execute
};
Я попытался .GetAwaiter().GetResults()
безуспешно, и похоже, что MySynchronousMethod()
не выполняется в вышеуказанных ситуациях, даже если я пытаюсь выполнить тестирование асинхронным методом с ожиданием и без него.