Мне удалось параллельно заполнить несколько таблиц базы данных, используя Task.WhenAll (задачи). У меня есть метод generic c для каждой таблицы:
var tasks = new List<Task>()
{
CheckNewItems<S, T>(async () => await GetPrimaryKeys<S, T>(),
CheckNewItems<S, T>(async () => await GetPrimaryKeys<S, T>(),
CheckNewItems<S, T>(async () => await GetPrimaryKeys<S,T>(),
CheckNewItems<S, T>(async () => await GetPrimaryKeys<S,T>()
};
await Task.WhenAll(tasks);
Теперь появилось новое требование, в котором содержится просьба сохранить количество новых элементов из этого асинхронного c метода, и я наткнулся на этот пост. Я попытался сделать это так, как указано в комментариях к принятому ответу, чтобы получить количество новых элементов:
int newItems = 0;
newItems += await CheckNewItems<S, T>(async () => await GetPrimaryKeys<S, T>();
newItems += await CheckNewItems<S, T>(async () => await GetPrimaryKeys<S, T>();
newItems += await CheckNewItems<S, T>(async () => await GetPrimaryKeys<S,T>();
newItems += await CheckNewItems<S, T>(async () => await GetPrimaryKeys<S,T>();
Используя второй метод, таблицы базы данных обновляются не параллельно, а синхронно.
Внутри этого метода CheckNewItem я использую методы SaveChangesAsyn c и AddRangeAsyn c в EF Core. Я не уверен, почему использование Task.WhenAll (tasks) выполняет желаемое действие, а второй способ - нет, когда в post в некоторых комментариях упоминается, что вам не нужно выполнять Task .WallAll, чтобы убедиться, что асин c методы работают параллельно.
Я хотел бы получать результаты каждого вызова CheckNewItems, хотя они все еще могут сохраняться в базе данных асинхронно и параллельно, как обычно. Заранее благодарим за понимание и помощь:)