通过Task< T>通过IPC
本文关键字:通过 IPC Task | 更新日期: 2023-09-27 18:03:14
我在服务和WinForm应用程序之间有一个IPC通信。它们在类的帮助下进行通信,它利用了以下接口:
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切换到任务时,我得到一个异常类型"System.Threading.Tasks"。汇编程序'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'中的任务' 1[[IPCInfo]'未标记为可序列化的。我看到它试图序列化Task,但失败了。有什么办法可以解决这个问题吗?
您将以哪种二进制格式发送任务?这个问题没有合理的答案。因此,无法发送任务。有道理吗?
如果你的IPC库或框架在本质上不是异步的,你不能返回任务给它。框架必须理解它们。
您可能正在处理一个同步优于异步的场景。阅读并理解这一点。现在你会意识到你的处境并不好。你得到了两个世界中最坏的:没有异步IO的好处和更多的CPU占用。
该怎么办?这取决于你的应用程序。也许你根本不应该使用异步(因为框架不支持)。