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# - Android Spinner 教程中无法隐式转换类型错误

c# - 将数据从对象列表复制到 C# 中的不同对象

.net - (Windows Azure) 消息队列 - 多台计算机上的事件

c# - Entity Framework 不可为空的列映射到可为空的实体属性

c# - 将图像旋转 X 度 C# wpf

C# - 读取并行端口状态(简单的按钮开关)

entity-framework - 如何在 Entity Framework 中创建表和 View 之间的关系

entity-framework - EF7 'dnx ef update database' 不工作

c# - 在 StatusStrip 的 ProgressBar 上显示文本

javascript - 从 asp.net 和 Ajax 的列表中删除自动完成选定的项目