Поведение нечетного ожидания задачи <> в зависимости от метода - PullRequest
0 голосов
/ 10 сентября 2018

Просто предшественник, этот сервер веб-сокетов использует 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() не выполняется в вышеуказанных ситуациях, даже если я пытаюсь выполнить тестирование асинхронным методом с ожиданием и без него.

...