У меня есть случай, когда я сделаю повторный вызов и на основе ответа я сохраню его в базе данных.Сохранение вызова и базы данных Сохранение с использованием C# Async Ожидание не работает
private async Task<bool> ProcessParallal<T>(IList<T> t,PropertyInfo pi, string name, int Id)
{
string mainId = null,intermediateId = null;
var tasks = t.Select(async item =>
{
var response = await CallRestApi(item,(long)(pi.GetValue(item)),name,id);
//Saving Rsult based on RestAPi result
// Requiremnt is wait until databse operation finishes
await this.SaveToTable(response.id,name,id));
});
await Task.WhenAll(tasks);
return await Task.FromResult(false);
}
private async Task<string> SaveToTable(int responseId,name,id)
{
//Save details in Audit Table
_iDataAccess.AuditSave(responseId,name,id);
return await Task.FromResult("Success");
}
public async Task<ResponseResult> CallRestApi<T>(T itemObj,id,name)
{
//Fetching From DB
var info = await fetchDetailsFromDB(id, name);
//Rest Api Call
return await CreateNewEntryByRestCall<T>(itemObj,info.name);
}
Но ProcessParallal оленьей кожи ждать до операции базы данных отделок (т.е. SaveToTable метод) .ProcessParallal метод возвращает до операции базы данных завершается.
Можно ли указать проблему с этим кодом ..
Что происходит, когда вы устанавливаете .ToList() на конец выбора? т. Е. Var tasks = t.Select (async item => ...). ToList(); – peinearydevelopment
@peinearydevelopment .. Это имеет значение. Я буду тестировать. – vmb
Невозможно воспроизвести эту проблему. Вы уверены, что ProcessParallal возвращается до того, как метод SaveToTable будет завершен? .. Можете ли вы снова проверить, возможно, вы можете поместить некоторые журналы. –