c# - 通过 IPC 传递任务<T>

标签 c# asynchronous ipc

我在服务和 WinForm 应用程序之间有 IPC 通信。它们在类的帮助下进行相互通信,类使用以下接口(interface):

public interface IBaseIPC
{

    Task<IPCConfig> GetConfig();
    Task<IPCInfo> Activate(IPCConfig ipcConfig);
    Task<IPCInfo> CancelActivation();
    Task<IPCInfo> GetInfo();
    Task<IPCInfo> Renew();
    Task<string> TestConnection(IPCConfig ipcConfig);
}

当这些方法同步时,它工作得很好。现在,当返回类型从 IPCConfig 切换到 Task 时,我收到异常 Type 'System.Threading.Tasks.Task`1[[IPCInfo]' in Assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken= b77a5c561934e089' 未标记为可序列化。 我看到它尝试序列化任务并失败。有什么办法可以解决这个问题吗?

最佳答案

您会以什么二进制格式发送任务?这个问题没有合理的答案。因此,您无法发送任务。有道理吗?

如果您的 IPC 库或框架本质上不是异步的,您无法将任务返回给它。框架必须理解它们。

您可能正在处理 sync-over-async场景在这里。阅读并理解这一点。现在你会认识到自己的处境并不好。您会得到两全其美的结果:没有异步 IO 优势,而且 CPU 使用率更高。

对此该怎么办?取决于您的应用。也许您根本不应该采用异步(因为框架不支持它)。

关于c# - 通过 IPC 传递任务<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23656908/

相关文章:

reactjs - 如何禁用 react 按钮直到 Meteor Method 完成

c# - 获取另一个项目的程序集版本 (.exe)

ipc - 等待绑定(bind) Unix 域套接字

c# - 检查现金抽屉是打开还是关闭

c# - 在方法调用时生成编译错误的属性?

java - 异步 EJB 上的 JTA 事务

c# - 如何从 .NET 4.0 (VS2010) 项目中定位 .NET 1.1 中的 API?

c# - 如何在 C# 中将用户定义的表类型作为存储过程参数传递

c# - 如何使用 CSS 包含隐藏的 DIV 而不会占用空间?

jQuery ajax 页面重新加载