C# Использование asyn c внутри foreach для выполнения API - PullRequest
0 голосов
/ 20 апреля 2020

Есть ли способ использовать foreach() для многократного вызова API с различными параметрами. В настоящее время код выполняет только первый элемент (itemOne), а не остальные элементы. Я хочу вернуть все результаты и затем выйти из функции.

Метод, который вызывает TestExecute (), поступает из контроллера. Я не показал метод контроллера, так как он вызывает только TestLogs. Там не отображаются ошибки. По сути, я хочу провести l oop через все три элемента, чтобы получить itemId и сохранить его в списке. В этом случае он будет вызывать API 3 раза и сохранять результаты, и только тогда я захочу выйти из этой функции.

    public class TestLogs
    {

        private readonly ITest _test;
        public TestLogs()
        {

            _test = new test();

        }

       private async Task<TestProjectsDto> GetProjectId()
       { 
            var date = new DateTime(2020, 04, 15);

            var sapProjectNum = new TestProjectsDto
            {
                Projects = new List<TestProjectDto>()
            };

            var list = new List<string>()
            {
                "itemOne",
                "itemTwo",
                "itemThree"
            };

            foreach (var divList in list)
            {
                var proIds = await _test.GetProjectItem(divList, date);

                if (proIds != null)
                {
                    sapProjectNum.Projects.AddRange(proIds.Projects);
                }
            }

            return sapProjectNum;
        }
        public async Task TestExecute()
        {
            // Where I call GetProjectId(); 
            var listProjectIds = GetProjectId();

            // etc 


        }

    }
}



public class TestService : ITest
{
        //etc 
    public async Task<TestProjectsDto> GetProjectOnSpecificDate(string divisionName, DateTime date)
    {
        var url = $"{test}/GetProjectOnSpecificDate.xsjs?TYPE=item={item}&Date={date:yyyy-MM-dd}";
        var response = await HttpClient.GetAsync(url).ConfigureAwait(false);

        if (response.IsSuccessStatusCode)
        {
            var content = await response.Content.ReadAsAsync<TestProjectsDto>().ConfigureAwait(false);

            return content;
        }

        return null;
    }
}
...