繁体   English   中英

异步实现同步WCF操作

[英]Async implementation of synchronous WCF operation

我有.net 4.5 WCF服务。 我将重写服务实现以使用EF6访问数据库。 此服务有许多客户端并处理许多呼叫。 我不能改变服务合同和客户。 使用像SaveAsync这样的异步EF操作是否有意义,最后我的服务必须返回T not Task(因为旧客户端)。

更新

Exaple运营合同

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

        return task.Result;
    }
}

因此,即使我正在使用异步,线程将被task.Result阻塞。 我不能使用等待因为操作合同必须更改为返回任务。 如何实现这样的场景?

使用像SaveAsync这样的异步EF操作是否有意义,最后我的服务必须返回T not Task(因为旧客户端)。

是的,它确实有意义,并将提高您的WCF服务的可扩展性。 您不必更改合同以利用服务器端的异步API。 转换对客户端完全透明,请检查:

不同形式的WCF服务合同接口

[OperationContract]
public async Task<object> AddEntityAsync(object entity)
{
    using(var context = new MyContext())
    {
        context.Add(entity)
        return await context.SaveChangesAsync();
    }
}

WCF应检测异步方法并正确路由调用,而无需在客户端进行修改。

我想SaveChangesAsync返回一个Task而不是一个Task<object>但是你知道该怎么做;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM