C# 使用C异步等待的Rest调用和数据库保存不起作用
我有一个案例,我将进行rest调用,并根据响应将其保存到数据库中C# 使用C异步等待的Rest调用和数据库保存不起作用,c#,.net,async-await,task-parallel-library,task,C#,.net,Async Await,Task Parallel Library,Task,我有一个案例,我将进行rest调用,并根据响应将其保存到数据库中 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 => {
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方法在数据库操作完成之前返回
有人能指出这段代码的问题吗?如果我理解了您在等待ProcessParallal方法时提出的问题,您的异步调用 然后应更改为同步调用:
private bool ProcessParallal<T>(IList<T> t,PropertyInfo pi, string name, int Id)
如果我理解了您在等待ProcessParallal方法时提出的问题,那么您的异步调用 然后应更改为同步调用:
private bool ProcessParallal<T>(IList<T> t,PropertyInfo pi, string name, int Id)
在Select的末尾放置.ToList时会发生什么情况?i、 e.var tasks=t.Selectasync item=>..ToList@发展有什么不同吗。。我将测试..无法复制此问题。您确定ProcessParallal在SaveToTable方法完成之前返回吗?。。您可以再次验证,可能是您可以在数据库操作完成之前放置一些日志..ProcessParallal方法返回-这是通过设计异步等待方法实现的。当执行到达带有wait的行时,如果返回的任务实例未完成,则执行返回给ProcessParallal方法的调用方。任务完成后,从等待行继续执行。在您的情况下,这是在执行命中line Wait Task时发生的;我认为您需要更具体地描述您的问题,并告诉我们不等待数据库操作完成是什么意思,以及您如何检查它不等待。那么,_iDataAccess.AuditSave sync还是async方法?您可以编辑答案以显示其声明。将.ToList放在Select的末尾会发生什么情况?i、 e.var tasks=t.Selectasync item=>..ToList@发展有什么不同吗。。我将测试..无法复制此问题。您确定ProcessParallal在SaveToTable方法完成之前返回吗?。。您可以再次验证,可能是您可以在数据库操作完成之前放置一些日志..ProcessParallal方法返回-这是通过设计异步等待方法实现的。当执行到达带有wait的行时,如果返回的任务实例未完成,则执行返回给ProcessParallal方法的调用方。任务完成后,从等待行继续执行。在您的情况下,这是在执行命中line Wait Task时发生的;我认为您需要更具体地描述您的问题,并告诉我们不等待数据库操作完成是什么意思,以及您如何检查它不等待。那么,_iDataAccess.AuditSave sync还是async方法?您可以编辑答案以显示其声明。