c# - 同步 WCF 操作的异步实现

标签 c# .net entity-framework wcf async-await

我有 .net 4.5 WCF 服务。我将重写服务实现以使用 EF6 访问数据库。该服务有许多客户并处理许多调用。我无法更改服务契约(Contract)和客户。使用像 SaveAsync 这样的异步 EF 操作是否有意义,最后我的服务必须返回 T 而不是任务(因为旧客户端)。

更新

示例操作合约

[OperationContract]
public object AddEntity(object entity)
{
    using(var context = new MyContext())
    {
        context.Add(entity)
        var task = context.SaveChangesAsync()

        return task.Result;
    }
}

所以即使我使用异步,线程也会被 task.Result 阻塞。我不能使用等待,因为必须更改操作契约(Contract)才能返回任务。如何实现这样的场景?

最佳答案

Does it make sense to use Async EF operations like SaveAsync, at the end my service must return T not Task (becouse of the old clients).

是的,它确实有意义并且会提高 WCF 服务的可伸缩性。您无需更改契约(Contract)即可在服务器端利用异步 API。转换可以对客户端完全透明,检查一下:

Different forms of the WCF service contract interface

关于c# - 同步 WCF 操作的异步实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24364711/

相关文章:

c# - 如何将现有内存缓冲区包装为 GDI 的 DC

c# - 基于用户权限的自定义认证和授权

c# - "Lazy"MVC5 Razor 执行 - ASP.NET(优化)

c# - GroupBy 使用外键的多个表

c# - 我可以对以任意顺序唯一的多个属性具有主键/唯一约束吗?

c# - Caliburn Micro,动态加载的 View / View 模型

c# - 在 C# 中修剪部分文本文件的代码

.net - LINQ 是否保证从 XDocument 读取的项目顺序?

c# - 如果文件夹不存在,如何创建文件和任何文件夹?

asp.net-mvc - 如何在 Entity Framework 中重用投影?