我有 .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。转换可以对客户端完全透明,检查一下:
关于c# - 同步 WCF 操作的异步实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24364711/