gpt4 book ai didi

Azure 服务总线 - SubscriptionClient.AcceptMessageSession() 与 SubscriptionClient.BeginAcceptMessageSession()

转载 作者:行者123 更新时间:2023-12-02 06:52:15 26 4
gpt4 key购买 nike

在 Azure 服务总线命名空间中,有一个 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 的引用?

最佳答案

您应该像这样调用该方法:

  1. 使用接受 IAsyncResultSubscriptionClient 的方法调用 begin 方法。
  2. 在另一个方法(本例中为 AcceptDone)中,使用 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();
}

关于Azure 服务总线 - SubscriptionClient.AcceptMessageSession() 与 SubscriptionClient.BeginAcceptMessageSession(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12639751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com