[英]Output multiple Brokered Messages to an Azure Service Bus Topic(s) with Azure Functions
[英]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
,返回Task
並await
任何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.