我正在尝试使用服务总线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
}我不确定我是否做错了什么或遗漏了什么,但我不知道如何在等待正确工作后对消息执行任何操作。
发布于 2017-10-24 22:55:35
您不应该显式调用Complete()。如果函数成功完成,Azure函数运行时将完成消息,如果函数失败,将放弃。
放弃函数运行库以PeekLock模式接收消息,如果函数成功完成,则对该消息调用
,如果函数失败,则调用PeekLock。
来自docs
发布于 2017-10-25 00:08:54
问题是函数需要返回Task而不是void,异步才能正常工作。在进行了更改之后,它将正确等待。
https://stackoverflow.com/questions/46913269
复制相似问题