奇数等待Task <>行为取决于方法

时间:2018-09-10 15:00:03

标签: asynchronous websocket async-await synchronization task

这只是一个先例,此Websocket服务器正在使用Flec,据我了解,.OnBinary()仅在客户端发送二进制数据时执行,.OnMessage()仅在发送文本数据时执行由客户提供。

本质上,客户端将初始文本消息发送到websocket,然后将所有后续数据作为640字节消息的二进制流写入websocket。我正在尝试在await方法中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()

0 个答案:

没有答案