Запрос HttpClient.PostAsyn c () не достигает места назначения - PullRequest
0 голосов
/ 28 мая 2020

Я изменяю процесс покупки на сайте электронной коммерции, на котором есть возможность совершать покупки для нескольких пользователей и нескольких продуктов за одну покупку. Для совершения крупных покупок иногда может потребоваться несколько минут, и серверная часть сайта электронной коммерции заставит пользователя ждать; не лучший UX.

Я пытаюсь заставить сайт генерировать строку JSON и передавать ее API, который будет выполнять обработку покупки на другом сервере, и позволить сайту продолжить работу на Страница благодарности, не дожидаясь ответа от API. Моя проблема в том, что иногда Post не попадает в API. Я помещаю команду thread.sleep после postasyn c, и это, кажется, решает проблему на моем локальном компьютере, но меня беспокоит надежность этого решения.

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);
                }

1 Ответ

1 голос
/ 28 мая 2020

надежно отправлять сообщения в API, не дожидаясь результата

Это невозможно. Надежный код требует await. Вызов асинхронных методов без await их использования - это форма «запустил и забыл», а по определению код «запустил и забыл» не заботится о том, завершится ли (или завершится) операция.

Один из альтернативных подходов, который может сработать для вас, - иметь надежную очередь и писать в , что , а не в API. Затем используйте фоновый процессор, который читает из этой очереди и отправляет сообщения в API.

...