Сведения о сотруднике становятся нулевыми в параллельном цикле ForEach C# при получении данных из APIC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Сведения о сотруднике становятся нулевыми в параллельном цикле ForEach C# при получении данных из API

Сообщение Гость »

Я столкнулся с проблемой при получении сведений о сотруднике из API с помощью параллельного цикла foreach в C#.
Вот что я делаю:
< ul>
[*]У меня есть список номеров сотрудников.
[*]Я перебираю этот список, используя параллельный цикл foreach.
[*] Внутри цикла я вызываю API с текущим номером сотрудника, чтобы получить сведения о сотруднике.
[*]Я добавляю полученные данные о сотруднике в список.

Однако я заметил, что иногда объект сотрудника в списке сведений о сотруднике становится нулевым. Я не знаю, почему это происходит и как это решить.
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;
}


Подробнее здесь: https://stackoverflow.com/questions/781 ... etching-da
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»