所以我有这个方法
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)时,事情好多了。但它实际上并没有实际返回响应,并且呼叫超时。
在本地,很明显,这一切都很有效(如果它没有,它就不会被贬低!)。
有没有人对地球上出了什么问题有任何建议?
答案 0 :(得分:0)
感谢旁边的相关链接,我找到了这个 - How would I run an async Task<T> method synchronously?
然后选择其中一个建议我使用 .GetAwaiter()。GetResult()对必须异步的方法进行调用,并使控制器同步(根据Dan Wilson的说法)建议)。
这很有效。
感谢所有人花时间引导我完成这项工作。