在Azure Service Bus命名空间中,有一个SubscriptionClient
类型,其中包含以这种方式启动MessageSession的方法: -
MessageSession session = subscriptionClient.AcceptMessageSession(...);
这是同步版本,它返回MessageSession。该库还提供了一个异步版本BeginAcceptMessageSession()。这个让我失望,因为它调用了一个回调函数,传入一个IAsyncResult和你希望传递的状态对象。在我的例子中,我正在传递SubscriptionClient实例,以便我可以在SubscriptionClient上调用EndAcceptMessageSession()。 BeginAcceptMessageSession()的返回类型为void。
如何访问通过BeginAcceptMessageSession()接受的MessageSession?我在回调的结果参数中得到的全部是我的SubscriptionClient实例,我需要通过EndAcceptMessageSession()来终止BeginAcceptMessageSession()。
无法找到MessageSession参考。在这方面,文档没有帮助。在Google上搜索只显示了3页的搜索结果,其中大部分只是MSDN中方法本身的在线描述。我查看了AsyncManager.Parameters,它也是空的。
有谁知道应该如何调用BeginAcceptMessageSession(),以便我可以获得对这样创建的MessageSession的引用?
答案 0 :(得分:2)
你应该调用这样的方法:
IAsyncResult
和SubscriptionClient
的方法调用begin方法。EndAcceptMessageSession
致电IAsyncResult
以获取MessageSession
您在此处看到的是异步编程模型的标准实现。
private static void Do()
{
SubscriptionClient client = ...
client.BeginAcceptMessageSession(AcceptDone, client);
}
public static void AcceptDone(IAsyncResult result)
{
var subscriptionClient = result.AsyncState as SubscriptionClient;
if (subscriptionClient == null)
{
Console.WriteLine("Async Subscriber got no data.");
return;
}
var session = subscriptionClient.EndAcceptMessageSession(result);
...
subscriptionClient.Close();
}