【问题标题】:Is ChannelFactory with async methods in .NET 4.5 supported?.NET 4.5 中是否支持具有异步方法的 ChannelFactory?
【发布时间】:2013-05-08 01:57:36
【问题描述】:

我正在将我们的 WCF 服务转换为使用异步编程。正如预期的那样,界面如下所示:

public interface IFoo
{
    Task<string> DoSomething(string request);
}

在客户端,我不是从 Visual Studio 创建服务引用。由于我同时拥有客户端和服务器,因此我只与客户端共享接口,然后我创建(并缓存)一个 ChannelFactory。要异步调用该方法,我使用预期的语法:

IFoo clientChannel = channelFactory.CreateChannel();
bool result = await clientChannel.DoSomething("Hello World");

我的问题是:ChannelFactory 生成的 IClientChannel 真的使用了下面的异步功能吗?我的意思是,我可以确定没有线程阻塞等待服务器响应吗?

【问题讨论】:

  • 你为什么不使用 JustDecompile/dotPeek/Reflector 自己看看?
  • 尝试在 LinqPad 中运行 my code 并告诉我你看到了什么......
  • @StephenCleary 反序列化 WCF 任务的代码将在 dotnet 4.5 库中非常深入(假设它甚至是 MSIL)。我不确定我是否希望对任何人进行这种反编译冒险。设计一些实验性的测试代码会更容易。
  • @Aron:我很难想出一个可以证明任何特定方法实际上是使用完全异步调用的测试。即,您链接到的代码不会这样做。
  • 将绑定替换为在调试器中运行的httpbinding然后断点,检查线程窗口。

标签: wcf async-await channelfactory


【解决方案1】:

查看 ClientBase 代码,异步调用归结为:

http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Channels/ServiceChannel.cs,0353de22100bb396

似乎没有任何理由认为线程会阻塞等待网络响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2012-06-02
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多