另一个操作挂起时异步模块已完成

r m*_*k r 1 c# async-await asp.net-web-api angularjs

我正在连接到 Quickbooks api,下载员工信息并将其保存到我的本地数据库。我正在使用 angularjs、webapi 来完成此操作。将信息保存到数据库时出现以下错误。我确实看到所有函数都有 async 和 await。有人可以帮助我为什么我收到这个错误。

错误 :

“/”应用程序中的服务器错误。异步模块或处理程序已完成,而异步操作仍处于挂起状态。

问题发生在下面粘贴的代码段中:

 var candidate = await CandidateLoginBL.AddCandidateByEmployeeAsync(new CandidateLoginBO()
                        {
                            FirstName = e.GivenName,
                            MiddleName = e.MiddleName,
                            LastName = e.FamilyName
          });
                        }
                    });
Run Code Online (Sandbox Code Playgroud)

完整流程如下:

js:

QuickbookModule.factory('QuickbookService', ['$http', function ($http) {

    return {
 getQuickbooksSync: function () {
            return $http({
                url: '/api/QuickbookService/syncQuickbooks',
                method: 'GET',
                params: { IdCompany: sessionStorage.CID }
            });
        }
Run Code Online (Sandbox Code Playgroud)

API控制器:

[HttpGet]
        [Route("syncQuickbooks")]
        public async Task<IHttpActionResult> syncQuickbooks(int IdCompany)
        {
          var result = await QuickbooksBL.FullQuickbooksSync(IdCompany);
          return Ok(result);
        }
Run Code Online (Sandbox Code Playgroud)

QuickbooksBL :

     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              });
                        }
                    });    
            }
Run Code Online (Sandbox Code Playgroud)

候选人联系BL :

 public static async Task<CandidateLoginBO> AddCandidateByEmployeeAsync(CandidateLoginBO model)
        {
            return await CandidateLoginDAL.AddCandidateByEmployeeAsync(model);
        }
Run Code Online (Sandbox Code Playgroud)

候选人联系DAL :

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;
        }
Run Code Online (Sandbox Code Playgroud)

Ste*_*ary 5

这种错误通常是由async void. 我在这里看到一个:

qbEmpsList.ForEach(async e =>
{
  ...
});
Run Code Online (Sandbox Code Playgroud)

你可能想把它变成一个常规的foreach

foreach (var e in qbEmpsList)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)