这只是一个先例,此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()
。