Как поставить таймер или подождать при отправке http запросов в c#? - PullRequest
0 голосов
/ 05 мая 2020

Я должен программно отправить более 1 миллиона запросов на api. Похоже, что каждые 200 запросов меня ограничивают, и мне нужно ждать 5 минут, прежде чем отправлять еще 200. Как я могу сделать это с помощью кода c#? Посмотрел таймеры, но запутался, как работает лог c. Может кто-нибудь помочь мне с этим?

Спасибо большое!

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Для этого вы можете использовать Reactive Extensions TimeShifting Sequences. Вы можете просмотреть примеры здесь

Если вам нужна собственная реализация, вы можете просмотреть это:

https://codeburst.io/throttling-concurrent-outgoing-http-requests-in-net-core-404b5acd987b

0 голосов
/ 05 мая 2020

Как заметил Рон Бейер, математика не в вашу пользу. Если вы будете дросселировать каждые 200 запросов, для выполнения всех 1 миллиона запросов потребуется 5000 циклов. Что равно не менее 25000 минут, или 416 часов, или 17,36 дня. И это минимум время, если предположить, что запросы сами по себе не занимают времени.

Думаю, можно сказать, что провайдер API не хочет, чтобы вы это делали . Хотя вы можете ограничить количество запросов для соответствия, это не будет иметь значения, поскольку 17 дней , вероятно, немного длинно для любого приложения. Вам понадобится таблица базы данных только для хранения общего количества запросов и того, как далеко вам удалось обработать этот 1 миллион запросов.

Единственный способ сделать это, если есть вызов API, который позволяет Запросы. Из-за накладных расходов сети ясно, что 1 запрос на 200 элементов не займет столько же времени, как 200 запросов на 1 элемент каждый. Но для этого вам нужно поговорить с поставщиком API.

...