【发布时间】:2015-05-22 04:21:28
【问题描述】:
我们有一个包装在 Windows 服务中的 WCF 记录器,它公开了各种方法,我可以从一个简单的控制台测试应用程序成功地同步和异步调用这些方法。在调试模式下从工作室运行服务,我可以看到各种断点被命中,我们得到了预期的输出。
当我从另一个 WCF 服务同步调用相同的服务方法时,这些方法也都可以正常工作......
using (var logger = new LoggerServiceClient())
logger.Log(...);
但是,如果我更改为 Async 调用方法,它根本不会执行任何操作...
using (var logger = new LoggerServiceClient())
logger.LogAsync(...);
我没有收到任何错误,代码愉快地继续运行,但没有任何内容影响记录器服务。不能是权限,因为同步方法调用有效。
就像我说的,相同的代码和配置位于测试控制台应用程序中,并且运行良好。我可以简单地在调用服务中添加或删除“异步”后缀,但行为不同。我们正在使用 w7,framework 4.0,使用 tpl,而 4.5 目前不是一个选项。
这让我很困惑,所以任何想法,无论多么奇怪,都会被考虑。
【问题讨论】:
-
您是否尝试等待异步调用?
await logger.LogAsync(...),省略 await 关键字可能会导致意外行为。 -
就像我提到的,这是使用 4.0 - 据我了解,Async/Await 仅在 C# 5.0 和 .NET Framework 4.5 中引入
-
是与否,await 关键字是一个编译器功能,它 can be used on framework 4 使用 vs2012 甚至 vs2010。无论如何,如果您的应用程序没有准备好异步,您不应该使用异步调用。
标签: c# web-services wcf asynchronous .net-4.0