HttpClient.PostAsync continueWith not execution

问题描述 投票:-2回答:1

我需要一些帮助来弄清楚为什么continueWith块中的以下代码没有被执行用于长时间运行的服务调用。

     public static async void postServiceAsync(string json, string postServiceUrl, string callbackUrl, string clientId, 
                                                  string tenant, string secret, string d365Environment, TraceWriter log)
        {
            HttpClient client = new HttpClient();

            //Get authorization header
            string authHeader = await D365Authorization.getAccessToken(clientId, tenant, secret, d365Environment);
            client.DefaultRequestHeaders.Add("Authorization", authHeader);
            var httpContent = new StringContent(json);

            client.Timeout = TimeSpan.FromMinutes(90);
            client.PostAsync(postServiceUrl, httpContent).ContinueWith(async (result) =>
            {
               //call callback URL
               //This is not executed after a long running service that runs for 20 minutes.
             }
         }

如果服务执行时间很短,则continueWith代码会运行。我认为这是一个超时问题所以我添加了client.Timeout值。我尝试在Postman中调用该服务,即使在等待20分钟以上也会返回一个值。我没有使用await,因为我希望在调用PostAsync后继续执行。我只想在长时间运行的服务执行完成后执行continueWith回调。谢谢你的帮助!

名为postServiceAsync的上述方法是从Azure功能调用的,该功能是从Azure Logic App http webhook操作调用的。这是Azure功能:

public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
            ...

            PostServiceAsync.postServiceAsync(json, shipServiceUrl, callbackUrl, clientId, tenant, secret, d365Environment, log);

            var resp = req.CreateResponse(HttpStatusCode.Accepted);
            return resp;
        }
    }

从Azure功能,我需要立即返回Accepted状态代码。在使用PostAsync调用长时间运行的服务之后,我需要发布回调URL,这是我在continueWith块中所做的。就像我提到的,如果服务运行时很短,它就可以工作。我尝试了Camilo建议添加await但是continueWith代码没有被执行。我也尝试摆脱continueWith并在“await client.PostAsync(...)”之后添加了代码。

c# asynchronous httpclient azure-functions azure-logic-apps
1个回答
0
投票

事实证明,没有响应的http调用有一个Azure函数230秒超时。我可能无法将Azure功能用于我的目的。

© www.soinside.com 2019 - 2024. All rights reserved.