簡體   English   中英

BrokeredMessage在等待后被處置

[英]BrokeredMessage being disposed after await

我正在嘗試使用服務總線Azure函數,在該函數中我接受BrokeredMessage,然后執行http請求,然后再決定是否完成,放棄還是以死信的方式發送消息。 但是我一直在發現,如果我等待一個http請求,BrokeredMessage將被提早處理。 System.ObjectDisposedException: 'BrokeredMessage has been disposed.' 如果我嘗試使用它。

例:

public static async void Run(BrokeredMessage message, TraceWriter log)
{
            var httpClient = new HttpClient()
            {
                BaseAddress = new Uri("http://google.com")
            };
            httpClient.DefaultRequestHeaders.Accept.Clear();
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            var request = new HttpRequestMessage(HttpMethod.Get, "/");
            HttpResponseMessage response = await httpClient.SendAsync(request);

            message.DeadLetter(); //Throws exception
}

我不確定我是在做錯什么還是遺漏了什么,但是我無法弄清楚在等待工作正確后如何對消息進行任何操作。

您不應顯式調用Complete() 如果功能成功完成,Azure Functions運行時將完成消息;如果功能失敗,則放棄該消息。

如果函數成功完成,Functions運行時會在PeekLock模式下接收消息,並在消息上調用Complete,如果函數失敗,則調用Abandon。

來自docs

問題在於函數需要返回Task而不是void才能使異步正常工作。 進行更改后,它將正確等待。

暫無
暫無

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

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