Подождите минуту, прежде чем вызвать следующий API в C # - PullRequest
0 голосов
/ 01 декабря 2018

Я хочу применить задержку / ожидание между каждым вызовом API.Я использую триггер очереди.Первая функция создаст API и сохранит API в очереди, а следующая функция вызовет API и получит ответ.Я хочу, чтобы моя функция состояла в том, чтобы подождать минуту после первого вызова API и вызвать следующий API и так далее.Я применил

System.Threading.Thread.Sleep(TimeSpan.FromSeconds(60));

Но это будет ждать минуты, чтобы вызвать первый API, как только задержка завершится, он вызывает все API в очереди без какой-либо задержки.

[01/ 12/2018 10: 11 : 05] Задержка минимального апикаля https://weblink.com/api/v2/topics?patentID=10 [12.01.2008 10: 11 : 06] Задержка минимального апикаля https://weblink.com/api/v2/topics?patentID=11 [01/12/2018 10: 11 : 06] Задержка минимального апикаля https://weblink.com/api/v2/topics?patentID=12 [01/12/2018 10: 11 : 06]Задержка минимального апикаля https://weblink.com/api/v2/topics?patentID=13

Я ожидаю

[12.01.2008 10: 11 : 05] Задержка минимального апикаля https://weblink.com/api/v2/topics?patentID=10 [01/12/2018 10: 12 : 06] Задержка минимального apicall https://weblink.com/api/v2/topics?patentID=11 [12.01.2008 10: 13 : 06] Задержка минимальногоapicall https://weblink.com/api/v2/topics?patentID=12 [01/12/2018 10: 14 : 06] Задержка min apicall https://weblink.com/api/v2/topics?patentID=13

Пример кода: код, который создает вызов API, помещается вqueue.

public static void Run([TimerTrigger("0 40 15 * * *")]TimerInfo myTimer, [Queue("topicque")] ICollector<string> outputQueueItem, TraceWriter log)
    {
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(" https://weblink.com/api/v2/parent");
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "GET";
        httpWebRequest.Headers["Authorization"] =""
        try
        {
            using (HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse())
            {
                Stream responseStream = response.GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream);
                str4 = streamReader.ReadToEnd();
                streamReader.Close();
                responseStream.Close();
            }
            foreach (Cat.cat cat in JsonConvert.DeserializeObject<List<Cat.cat>>(str4))
            {
            long id=cat.id
            ICollector<string> collector = outputQueueItem;
            string str5 = " https://weblink.com/api/v2/topics?patentID="+id
            collector.Add(str5);
            }
            }

Код, который запускается из очереди и вызывает API

public static void Run([QueueTrigger("topicque")] string myQueueItem, [Queue("topicque")] ICollector<string> outputQueueItem2, TraceWriter log)
    {

    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(60));
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(myQueueItem);
    httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "GET";
         try
        {
            using (HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse())
            {

                Stream responseStream = response.GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream);
                str3 = streamReader.ReadToEnd();
                streamReader.Close();
                responseStream.Close();
                }
                }
                }

Есть ли какой-нибудь способ, которым мы могли бы достичь этого?

Спасибо

...