通过IPC </t>传递任务<t>

时间:2014-05-14 14:02:07

标签: c# asynchronous ipc

我在服务和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切换到Task时,我得到一个异常Type&#39; System.Threading.Tasks.Task`1 [[IPCInfo]&#39;在Assembly&#m; mscorlib中,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089&#39;未标记为可序列化。 我看到它试图序列化任务并失败。有没有解决这个问题的方法?

1 个答案:

答案 0 :(得分:4)

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

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

您可能正在处理sync-over-async方案。阅读并理解这一点。你现在已经认识到自己处境不佳。您将获得两个方面的最差:没有异步IO优势和更多的CPU使用率。

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