C# 编写能够处理异步和同步调用方法的API

C# 编写能够处理异步和同步调用方法的API,c#,asynchronous,dependency-injection,portable-class-library,C#,Asynchronous,Dependency Injection,Portable Class Library,我可能没有以正确的方式处理我的问题,因此我将详细解释我已经拥有的东西。 我已经编写了一个PCL,它基本上代表了我的业务层。此业务层调用多个Web服务,并将内部DTO封装在业务对象中,然后由多个表示层(WinRT、Android、iOS和Web客户端)使用 我想缓存一些对“磁盘”的Web服务调用的结果,为了做到这一点,我必须将序列化数据的每个平台方法的依赖关系注入到它自己的存储中。输入一个界面来执行此操作 问题是,有些平台可能只提供同步或异步API来将数据存储到磁盘。例如,WinRT中的Stor

我可能没有以正确的方式处理我的问题,因此我将详细解释我已经拥有的东西。


我已经编写了一个PCL,它基本上代表了我的业务层。此业务层调用多个Web服务,并将内部DTO封装在业务对象中,然后由多个表示层(WinRT、Android、iOS和Web客户端)使用

我想缓存一些对“磁盘”的Web服务调用的结果,为了做到这一点,我必须将序列化数据的每个平台方法的依赖关系注入到它自己的存储中。输入一个界面来执行此操作

问题是,有些平台可能只提供同步或异步API来将数据存储到磁盘。例如,WinRT中的StorageFile只有基于TAP的API。


我的问题是,如何才能让这些截然不同的组件很好地发挥作用。我正在考虑使用异步方法创建接口,并以某种方式将潜在的同步方法转换为这些伪异步实体。。。但这感觉不对

有什么想法吗


谢谢

您始终可以使用本机异步机制同步调用异步方法,反之亦然。请阅读和。我将建议您创建一个具有自己形状的API;我的意思是,若您的API本质上是异步的,那个么只公开异步版本,用户可以根据需要等待,反之亦然versa@SriramSakthivel我将阅读你发布的那两个链接。问题是,不知道实现本身是异步的还是同步的,因为这取决于PCL的用户。Web服务包装器在PCL中是异步的,因此缓存/序列化过程也应该是异步的(因为这促进了异步编程接口的预期行为)。不幸的是,.NET公开的序列化API到目前为止还不是异步的,这是另一个令人担忧的原因。我唯一的选择似乎是结束任务。Run@roadysix:一般来说,CPU绑定操作(如内存内序列化)是同步的,I/O绑定操作(如web服务调用和磁盘访问)是异步的。@roadysix:假设序列化是非平凡的(即,您不希望在UI线程上运行它),然后,您可以考虑将CPU绑定部分从I/O绑定部分中分离出来。如果这是不可行的,那么您应该公开一个异步API,但带有注释,明确说明它还具有同步的、CPU绑定的部分。