【发布时间】:2025-12-21 20:05:08
【问题描述】:
我使用 thrift (version 0.11.0) c# 编译器来生成支持异步操作的 c# 库。命令行如下:
thrift-0.11.0.exe --gen csharp:async Message.thrift
当我启动一个客户端时,程序抛出一个 Thrift.Transport.TTransportException 异常并显示消息:
此传输不支持异步操作
客户端代码sn-p:
TTransport transport = new TSocket("localhost", 9090);
TProtocol protocol = new TBinaryProtocol(transport);
MessageService.Client client = new MessageService.Client(protocol);
client.Add(someObject);
由于TSocket 不支持异步操作,我检查了Thrift.Transport 命名空间中定义的所有类。似乎它们都不支持异步操作。
我在 Java 中找到了一个 TNonblockingTransport 类,它似乎支持异步操作。 .Net/C# 是否有任何等效的 thrift 传输方式?
更新
我已经检查了Apache Thrift Language Support。而且它还不支持 C# 中的非阻塞服务器。它在 .net core 2.x 中支持它,这不适用于我的场景,因为我正在使用 WPF。
【问题讨论】:
-
作为客户端,我在 Unity3D 游戏引擎中尝试节俭时遇到了同样的问题。阻止实施工作正常。但异步的不是。你找到解决办法了吗?
-
@flankechen 不,我终于用block api了。
-
谢谢,如果是这样,您是否尝试过 csharp 中的异步任务事物来进行块 api 调用?
-
是的,这是我目前的解决方法