首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待后释放的BrokeredMessage

等待后释放的BrokeredMessage
EN

Stack Overflow用户
提问于 2017-10-24 22:31:26
回答 2查看 309关注 0票数 1

我正在尝试使用服务总线Azure函数,在该函数中,我接受一个BrokeredMessage,然后执行http请求,然后决定是完成、放弃还是死信该消息。但是我发现,如果我等待一个http请求,BrokeredMessage会被提前释放。如果我尝试使用它,它就会抛出System.ObjectDisposedException: 'BrokeredMessage has been disposed.'

示例:

代码语言:javascript
复制
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
}

我不确定我是否做错了什么或遗漏了什么,但我不知道如何在等待正确工作后对消息执行任何操作。

EN

回答 2

Stack Overflow用户

发布于 2017-10-24 22:55:35

您不应该显式调用Complete()。如果函数成功完成,Azure函数运行时将完成消息,如果函数失败,将放弃。

放弃函数运行库以PeekLock模式接收消息,如果函数成功完成,则对该消息调用

,如果函数失败,则调用PeekLock。

来自docs

票数 0
EN

Stack Overflow用户

发布于 2017-10-25 00:08:54

问题是函数需要返回Task而不是void,异步才能正常工作。在进行了更改之后,它将正确等待。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46913269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档