异步控制器方法不在Azure中返回响应,但在本地工作

时间:2018-04-18 14:57:53

标签: c# azure asynchronous

所以我有这个方法

         public async System.Threading.Tasks.Task<HttpResponseMessage> 
EmbedBIReport(string reportId)

一旦它关闭并完成各种异步调用,例如

var authenticationAccessToken = 
  await _wrapperPowerBi.AuthenticationAccessToken(LookupValues.PbiResourceUrl,
  LookupValues.PbiClientId, credential)
  .ConfigureAwait(false);

它会像这样构建一个响应

var embedConfig = new EmbedConfigModel
                {
                    EmbedToken = tokenResponse,
                    EmbedUrl = report.EmbedUrl,
                    Id = report.Id
                };                   

                var responseMessage = new ApiResponseMessageModel(
                    (int)BaseApiResponseCodeEnum.Ok,
                    LookupValues.PbiSuccessMessage);

                var response = _responseBuilder.BuidPowerBiResponse(
                    Request,
                    RequestId.Get,
                    HttpStatusCode.OK,
                    new List<ApiResponseMessageModel> { responseMessage },
                    embedConfig);

调试写入确认它已到达此点,成功构建响应。

到目前为止,非常好。

最后,我们有

return response;

这就是它变得奇怪的地方......

最初,部署到Azure测试环境时,它根本不起作用。当我在每个 await 的末尾放置 .ConfigureAwait(false)时,事情好多了。但它实际上并没有实际返回响应,并且呼叫超时。

在本地,很明显,这一切都很有效(如果它没有,它就不会被贬低!)。

有没有人对地球上出了什么问题有任何建议?

1 个答案:

答案 0 :(得分:0)

感谢旁边的相关链接,我找到了这个 - How would I run an async Task<T> method synchronously?

然后选择其中一个建议我使用 .GetAwaiter()。GetResult()对必须异步的方法进行调用,并使控制器同步(根据Dan Wilson的说法)建议)。

这很有效。

感谢所有人花时间引导我完成这项工作。