0

我在ASP.NET 4.6的工作与EF 6到一个新的网络API 2项目,我读了很多文章,介绍了异步/的await模式,这是清楚的是,对于很多请求,这种模式由于很多原因而提高了性能。 所以我决定第一次使用它。 在这里决定创建一个Biz项目和一个DAL项目的例子。实体框架6异步/ AWAIT失败并行请求

这是控制器的方法:在控制器构造

[HttpGet] 
public async Task<bool> CheckValueValidity(string value, string type) 
{ 
    return await _accountsBiz.CheckValueTypeValidity(value, type); 
} 

我实例BIZ对象。

这是BIZ:

public async Task<bool> CheckValueTypeValidity(string value, string type) 
    { 
     bool isValid = false; 
     switch (type.ToLower()) 
     { 
      case "email": 
       isValid = await _accountsRepository.CheckEmailValidity(value); 
       break; 
      case "username": 
       isValid = await _accountsRepository.CheckUserNameValidity(value); 
       break; 
     } 
     return isValid; 
    } 

我实例在BIZ构造函数库。

最后,这是DAL方法:和所有它似乎很好地工作,直到我做的两人同时要求,其中之一返回正确的值

public async Task<bool> CheckEmailValidity(string email) 
    { 
     using(MyEntities db = new MyEntities()) 
     { 
      return await db.AspNetUsers.CountAsync(u => u.Email == email) > 0 ? false : true; 
     } 
    } 

说其他

在先前的异步操作完成之前,在此上下文中开始第二个操作。在调用此上下文中的另一个方法之前,请使用'await'来确保任何异步操作已完成。任何实例成员不保证是线程安全的。

我提出了来自两个不同客户端的请求,所以上下文应该不同。应该....

我不知道如何解决它。我读了很多,我的代码似乎是正确的。

的问题是,为什么抛出这个错误?我不明白

感谢您的建议帮助。

回答

0

好的发现执行流程中的错误有一个方法,使用DbContext没有using块....我的错误,但现在很明显,上下文必须处理每个请求!