ServiceHost.BeginOpen阻止调用者线程

时间:2013-08-01 06:36:10

标签: c# .net wcf

我在WPF应用程序中使用ServiceHost。当我调用ServiceHost.Open方法时,它需要大约30秒才能完成(我连接到Azure ServiceBus。漫长的等待时间似乎来自我们公司的互联网代理)。

因为需要很长时间,我希望此调用不会阻止Dispatcher线程,它应该支持Cancellation。不幸的是,ServiceHost不支持Task API,但很容易创建一个:

public static class CommunicationObjectExtensions
{
    public static Task OpenAsync(this CommunicationObject co, CancellationToken token)
    {
        token.Register(() => co.Abort());

        return Task.Factory.FromAsync(co.BeginOpen(null, null), co.EndOpen);
    }
}

为什么ServiceHost.BeginOpen调用会阻塞Dispatcher线程? MSDN文档说,BeginOpen将以异步方式完成。这样就不应该阻止Dispatcher线程了。

0 个答案:

没有答案