我的功能在不运行异步时工作正常,但当我尝试将其更改为.ToListAsync()
时,它失败了
" ObjectContext实例已被处理,不再可以 用于需要连接的操作"
以下是失败的......
public async void UpdateNoAction()
{
await (from r in Context.CodingReview
from s in Context.UserDetails.Where(s => s.reviewId = r.id)
where ...
select new ExtendedDetails(){
Review = r,
Spell = s
}).ToListAsync();
}
Context是一个实体框架数据库连接。返回类型是无效的,所以我实际上得到错误消息而不是静默失败,但稍后将更改为bool。
如果我删除Context.UserDetails
部分以进行测试,则可以正常工作。关于它为什么会失败的任何想法?
答案 0 :(得分:2)
最有可能的问题与async void
用法有关。
我想你是在一些其他方法中打开一个连接,并在那个方法中调用此方法并关闭连接。 async void
类型方法是fire和forget类型,这意味着在执行完成之前方法返回;那么在此方法完成其操作之前,您的数据库连接可能会被关闭。
将方法签名从public async void UpdateNoAction()
更新为public async Task UpdateNoAction()
或public async Task<List<ExtendedDetails>> UpdateNoAction()
;那么我猜问题会得到解决。