我在服务和 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/