Azure服务总线-SubscriptionClient.AcceptMessageSession()与SubscriptionClient.BeginAcceptMessageSession()的比较
在Azure Service Bus命名空间中,有一个Azure服务总线-SubscriptionClient.AcceptMessageSession()与SubscriptionClient.BeginAcceptMessageSession()的比较,azure,servicebus,azureservicebus,Azure,Servicebus,Azureservicebus,在Azure Service Bus命名空间中,有一个SubscriptionClient类型,该类型具有一个以以下方式启动MessageSession的方法:- MessageSession session = subscriptionClient.AcceptMessageSession(...); 这是同步版本,它返回MessageSession。该库还提供了一个异步版本BeginAcceptMessageSession()。这一个让我大吃一惊,因为它调用回调,传入IAsyncResul
SubscriptionClient
类型,该类型具有一个以以下方式启动MessageSession的方法:-
MessageSession session = subscriptionClient.AcceptMessageSession(...);
这是同步版本,它返回MessageSession。该库还提供了一个异步版本BeginAcceptMessageSession()。这一个让我大吃一惊,因为它调用回调,传入IAsyncResult和您希望传递的任何状态对象。在本例中,我将传递SubscriptionClient实例,以便在SubscriptionClient上调用EndAcceptMessageSession()。BeginAcceptMessageSession()的返回类型为void
如何访问通过BeginAcceptMessageSession()接受的MessageSession?回调的result参数中返回的只是SubscriptionClient实例,我需要它来通过EndAcceptMessageSession()终止BeginAcceptMessageSession()
找不到MessageSession引用。文件在这方面没有帮助。在谷歌上搜索只显示了不到3页的搜索结果,其中大部分只是MSDN中对该方法本身的在线描述。我查看了AsyncManager.Parameters,它也是空的
有人知道应该如何调用BeginAcceptMessageSession(),以便我可以获得对由此创建的MessageSession的引用吗?您应该这样调用该方法:
IAsyncResult
和SubscriptionClient
的方法调用begin方法IAsyncResult
调用EndAcceptMessageSession
,以获取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();
}
哇,谢谢你。我没有注意到EndAcceptMessageSession()的返回类型!。这些天你是我的英雄。服务总线非常棒,但是社区需要的不仅仅是一堆方法描述作为文档!如果我想使用SubscriptionClient.BeginAcceptMessageSession(),然后使用MessageSession.BeginReceive(),那么从AcceptDone()中调用BeginReceive()是否可以接受?在我看来,这是让它们都异步运行,而不是并行运行的唯一方法。