【问题标题】:implementing async method wcf [closed]实现异步方法 wcf [关闭]
【发布时间】:2014-01-15 13:19:11
【问题描述】:

我正在实现异步方法。但我不确定我所做的是否正确。 比如方法写trace并做一些处理:

Trace.TraceInformation("Synchronous call");
            if (null == data)
            {
                Trace.TraceError("InvalidInputException");
                OrdersFaultException connEx = new UnknownFaultException();
                throw new FaultException<YnknownFaultException>(connEx);
            }
            try
            {
               object o = await //some call;
               //check that the object is not null and make some processing
            }
}

没事吧?或者我应该把它改成没有“同步”部分 这段代码没有被编译,它只是显示有部分代码是“同步的”

【问题讨论】:

  • 一方面,您的代码甚至无法编译。你到底想要完成什么?
  • 我已经修复了代码,所以它是正确的。

标签: c# wcf asynchronous


【解决方案1】:

您的代码是正确的,没有什么会告诉您不要这样做,但是您的代码 await //some call; 将阻止服务器端执行,但客户端将与调用保持同步,直到方法服务器端终止或 @987654324 中的任何一个@ openTimeout receiveTimeout sendTimeout 已达到限制,因此客户端将忽略调用结果。 为了以异步方式实现调用,您应该使用像svcutil 这样的工具,它将生成带有synchronousasynchronous 方法签名的客户端代理。

查看以下链接,该链接涵盖了客户端如何异步访问服务操作Call WCF Service Operations Asynchronously

【讨论】:

  • 那我为什么要写 await command.ExecuteScalarAsync();在这里我不对所有函数体使用等待,而只对它的一部分使用?
  • 当操作可能需要更多时间时可以做出选择,以避免使用该方法的客户端被阻塞一段时间
  • 什么是“更多时间”?我根本不希望用户被阻止。所以我需要将函数内的所有内容都放入异步(lambda)调用中?
  • 超过预期的时间或长时间运行的操作,因此如果您在客户端进行异步调用,您的客户端可以在等待服务器结果的同时继续执行其他任务
  • 请告诉我为什么我们要等待 command.ExecuteScalarAsync();
猜你喜欢
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
相关资源
最近更新 更多