[英]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.