2

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

因为它需要很长时间,所以我希望这个调用不会阻塞 Dispatcher 线程并且它应该支持取消。不幸的是,ServiceHost 不支持任务 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 线程。

4

0 回答 0