Вот что я Я делаю:
- У меня есть список номеров сотрудников.
- Я перебираю этот список, используя параллельный цикл foreach .
- Внутри цикла я вызываю API с текущим номером сотрудника, чтобы получить сведения о сотруднике.
- Я добавляю полученные сведения о сотруднике в list.
public List GetEmployees(List empNumber)
{
List employeeList = new List();
try
{
List cb = new List();
var tasks = new ConcurrentBag();
Parallel.ForEach(empNumber, reference =>
{
tasks.Add(Task.Run(() =>
{
var importedEmployee = GetEmployeeDetails(reference.ToString());
if (importedEmployee != null)
{
lock (cb)
{
cb.Add(importedEmployee);
}
}
}));
});
Task.WaitAll(tasks.Where(t => t != null).ToArray());
employeeList.AddRange(cb.ToList());
}
catch (Exception ex)
{
Log.Error("Error");
}
return employeeList;
}
public ImportedEmployee GetEmployeeDetails(string empNum)
{
ImportedEmployee employeeDetails = new ImportedEmployee();
try
{
var responseString = ServiceRequest($"Employees/{empNum}", null, HttpVerbs.Get).ToString();
JObject result = JObject.Parse(responseString);
employeeDetails.FirstName = result["FirstName"].ToString();
employeeDetails.LastName = result["LastName"].ToString();
employeeDetails.Username = result["LoginId"].ToString();
}
catch (Exception ex)
{
Log.Error("Error retrieving employee details.", ex);
}
return employeeDetails;
}
public string ServiceRequest(string URI, string PostJSON, HttpVerbs Method)
{
string responseString;
try
{
HttpResponseMessage resp;
using (HttpClient client = new HttpClient() { Timeout = TimeSpan.FromSeconds(Configuration.ClientTimeout) })
{
HttpRequestMessage request = new HttpRequestMessage();
switch (Method)
{
case HttpVerbs.Get:
request = new HttpRequestMessage(HttpMethod.Get, BaseURL + URI);
break;
default:
request = new HttpRequestMessage(HttpMethod.Post, BaseURL + URI);
request.Content = new StringContent(PostJSON, null, "application/json");
break;
}
request.Headers.Add("Authorization", $"Bearer {AuthToken.Token}");
resp = client.SendAsync(request).Result;
}
responseString = resp.Content.ReadAsStringAsync().Result;
}
catch (Exception ex)
{
Log.Error("Error", ex);
responseString = null;
}
return responseString;
}
public class ImportedEmployee
{
public string EmployeeNumber { get; set; }
public string Username { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... etching-da