【问题标题】:HttpClient.PostAsync() request not reaching destinationHttpClient.PostAsync() 请求未到达目的地
【发布时间】:2020-05-28 16:06:14
【问题描述】:

我正在修改一个电子商务网站的购买流程,该网站能够通过一次购买为多个用户和多个产品进行购买。大额购买有时可能需要几分钟才能完成,电子商务网站后端会让用户等待;不是很好的用户体验。

我正在尝试让网站生成一个 JSON 字符串并将其转移到一个 API,该 API 将在不同的服务器上进行购买处理,并让网站在ThankYou 页面上继续,而无需等待来自API。 我的挑战是,有时 Post 无法进入 API。我在 postasync 之后放置了一个 thread.sleep 命令,这似乎解决了我本地机器上的问题,但我担心该解决方案的可靠性。

TLDR;我的目标是让代码可靠地将帖子发送到 API,而无需等待结果。这是我以前一直在努力解决的问题,如果有最佳实践来实现结果,我一直找不到。任何建议将不胜感激。

见下面的邮政编码;没什么好看的。代码位于电子商务后端的 eventHandler 函数中。

using (System.Net.Http.HttpClient client = new HttpClient(new HttpClientHandler(),false))
                {
                    var url = ConfigurationManager.AppSettings["APIURL"];
                    var reqBody = new StringContent(RequestData.ToString(), Encoding.UTF8, "application/json");

                   var task =  client.PostAsync(url, reqBody);

                    //increases chance of post reaching API before function ends 
                    Thread.Sleep(3000);
                }

【问题讨论】:

    标签: .net asynchronous post c#-4.0 concurrency


    【解决方案1】:

    可靠地将帖子发送到 API,而无需等待结果

    这是不可能的。可靠的代码需要 await。在没有awaiting 的情况下调用异步方法是一种“即发即弃”的形式,根据定义,即发即弃代码并不关心操作是否(或是否)完成。

    另一种可能对您有用的方法是拥有一个可靠的队列并写入 that 而不是 API。然后有一个后台处理器从该队列中读取数据并发布到 API。

    【讨论】:

    • 这是一个比预期更容易的解决方案!感谢您的洞察力!
    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2020-12-21
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多