【问题标题】:Is there any transport in thrift 0.11.0 c# library that support Asynchronous operations?thrift 0.11.0 c# 库中是否有任何支持异步操作的传输?
【发布时间】: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 调用?
  • 是的,这是我目前的解决方法

标签: c# thrift


【解决方案1】:

即使您的整个应用程序不是 .Net Core(不支持 WPF),您也可以使用 netcore 生成器。

使用netcore 生成器创建一个您应该能够引用的.Net 标准库。我们在三个不同的 WPF 应用程序中使用这种方法。

Thrift.Transports.Client 命名空间包含具有async 成员函数的客户端。

【讨论】:

    最近更新 更多