我有案例,我将进行休息,并根据响应我将其保存到数据库中。
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 do do not等待直到数据库操作完成(即Savetotable方法)。程序Parallal方法在数据库操作完成之前返回。
任何人都可以指出此代码的问题。
如果我理解您在等待processparallal方法的情况下正确提问,您的异步调用
private async Task<bool> ProcessParallal<T>(IList<T> t,PropertyInfo pi, string name, int Id)
应该更改为同步呼叫:
private bool ProcessParallal<T>(IList<T> t,PropertyInfo pi, string name, int Id)