C# 异步模块在另一个操作挂起时完成
我正在连接Quickbooks api,下载员工信息并将其保存到本地数据库。我正在使用angularjs、webapi来实现这一点。当我将信息保存到数据库时,出现以下错误。我确实看到所有函数都有async和Wait。有人能帮我解释一下为什么我会犯这个错误吗 错误: “/”应用程序中出现服务器错误。异步模块或处理程序已完成,而异步操作仍处于挂起状态 以下粘贴的代码中出现问题:C# 异步模块在另一个操作挂起时完成,c#,angularjs,asp.net-web-api,async-await,C#,Angularjs,Asp.net Web Api,Async Await,我正在连接Quickbooks api,下载员工信息并将其保存到本地数据库。我正在使用angularjs、webapi来实现这一点。当我将信息保存到数据库时,出现以下错误。我确实看到所有函数都有async和Wait。有人能帮我解释一下为什么我会犯这个错误吗 错误: “/”应用程序中出现服务器错误。异步模块或处理程序已完成,而异步操作仍处于挂起状态 以下粘贴的代码中出现问题: var candidate = await CandidateLoginBL.AddCandidateByEmploye
var candidate = await CandidateLoginBL.AddCandidateByEmployeeAsync(new CandidateLoginBO()
{
FirstName = e.GivenName,
MiddleName = e.MiddleName,
LastName = e.FamilyName
});
}
});
全流程如下:
js:
API控制器:
[HttpGet]
[Route("syncQuickbooks")]
public async Task<IHttpActionResult> syncQuickbooks(int IdCompany)
{
var result = await QuickbooksBL.FullQuickbooksSync(IdCompany);
return Ok(result);
}
快速书架:
public static async Task<List<IncompleteEmp>> FullQuickbooksSync(int IdCompany)
{return await SyncronizeEmps(IdCompany); }
public static async Task<List<IncompleteEmp>> SyncronizeEmps(int companyId)
{
......
List<EmployeeBO> empList = new List<EmployeeBO>();
await AddToHumanEfits(companyId, inQBEmpsInfo); ....
}
return IncompleteEmps;
}
public static async Task AddToHumanEfits(int companyId, List<EmployeeQbOnlineBO> qbEmpsList)
{
....
qbEmpsList.ForEach(async e =>
{
// Add a record into Candidate Login.
var candidate = await CandidateLoginBL.AddCandidateByEmployeeAsync(new CandidateLoginBO()
{
FirstName = e.GivenName,
MiddleName = e.MiddleName,
LastName = e.FamilyName });
}
});
}
候选联系人BL:
public static async Task<CandidateLoginBO> AddCandidateByEmployeeAsync(CandidateLoginBO model)
{
return await CandidateLoginDAL.AddCandidateByEmployeeAsync(model);
}
候选人:
public static async Task<CandidateLoginBO> AddCandidateByEmployeeAsync(CandidateLoginBO model)
{
CandidateLoginBO candidate = new CandidateLoginBO();
candidate = await GetByUserNameAsync(new CandidateLoginBO() { Email = model.Email }); candidate = await AddEmployeeAsync(model);
return candidate;
}
这种错误通常是由async void引起的。我在这里看到一个:
qbEmpsList.ForEach(async e =>
{
...
});
您可能希望将其制作成常规的foreach:
这种错误通常是由async void引起的。我在这里看到一个:
qbEmpsList.ForEach(async e =>
{
...
});
您可能希望将其制作成常规的foreach:
你不能把问题缩小到一个较小的代码示例吗?当然可以。问题发生在//将记录添加到候选登录中。部分我添加代码来显示整个流程。那么为什么我们需要所有其他代码呢?将其剥离,直到您有一个仍然存在问题的最小代码段。您不能将问题缩小到一个较小的代码示例吗?当然可以。问题发生在//将记录添加到候选登录中。部分我添加代码来显示整个流程。那么为什么我们需要所有其他代码呢?将其剥离,直到有一个仍然存在问题的最小代码段为止。那么async void有问题吗?如果你有关于它的博客,请给我发邮件link@joedotnot:My引用了这个问题:一个微妙的陷阱是将异步lambda传递给采用动作参数的方法;在这种情况下,异步lambda返回void并继承异步void方法的所有问题?如果你有关于它的博客,请给我发邮件link@joedotnot:My引用了这个问题:一个微妙的陷阱是将异步lambda传递给采用动作参数的方法;在本例中,异步lambda返回void并继承异步void方法的所有问题。
foreach (var e in qbEmpsList)
{
...
}