簡體   English   中英

為Microsoft Azure Service Bus代理消息實現SendBatchAsync

[英]Implementing SendBatchAsync for Microsoft Azure Service Bus Brokered Messages

我的要求是我必須異步將代理消息列表發送到azure服務總線。 但是,我無法正確實現SendBatchAsync方法。 讓我詳細解釋。 這是我的代碼:

public async Task SendBatchEnrollmentMessages()
{
    while(somevalue) 
    {
        //logic to fetch data from the SQL db through stored proc into list of brokered message i.e. messageList
        if(messageList.Count() > 0)
        {
            await sender.SendMessagesAsync(messageList);
        } 
        //some more logic for somevalue
    }
}

SendMessageAsync邏輯為:

public async Task SendMessagesAsync(List<BrokeredMessage> brokeredMessageList)
{
    var topicClient = CreateTopicClient();
    await topicClient.SendBatchAsync(brokeredMessageList);
}

我的問題是,當我使用斷點調試應用程序時,編譯器會一直await topicClient.SendBatchAsync(brokeredMessageList); 並退出代碼,即應用程序調試已完成。 它不會返回到while條件。 但是,而是如果我使用的sendBatch使用SendBatchAsync的,它工作正常。 我究竟做錯了什么?

解決方案:問題在於調用上述函數的測試方法。 它的類型為void。 它應該是異步任務類型。 非常感謝Ned Stoyanov在此方面的幫助。

當遇到await語句並設置正在等待的異步操作時, async方法將返回。 然后, await完成后,其余方法將繼續。

您可能無法逐步執行類似的async方法,但是請嘗試在await之后放置一個斷點,並且在異步調用完成后應該會遇到斷點。

否則,您可能會陷入僵局,請參閱這篇文章以了解避免這種情況一些方法。

正如我們在討論中提到的,單元測試也需要async ,返回Taskawait任何async調用

[TestMethod] 
public async Task SendRegionsEnrollmentMessages() 
{ 
    EventManager eventMgr = new EventManager(clientUrn, programUrn, "CW"); 
    await eventMgr.SendBatchEvents(EventType.ENROLLMENT); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM