Cyr*_*rom 1 c# entity-framework async-await asp.net-core
在asp.net 5/core中,我希望使用async从我的数据库中删除一个项目.我正在使用DI在类中注入我的Datacontext(db).
我创建了以下方法:
public async void DeleteItemAfterTimeAsync(int itemId, TimeSpan timeSpan)
{
// give user time to fill out data
await Task.Delay(timeSpan);
var item = db.Items.FirstOrDefault(p => p.Id == itemId);
if (item!= null && item.Status == someStatus)
{
db.Items.Remove(item);
db.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
在给定时间之后,该方法按计划执行,但我得到一个例外:'无法访问已处置的对象',这可能是因为服务因延迟而被处理.我应该在方法中解析我的datacontext的新实例,或者我该如何解决这个问题?有任何想法吗?感谢您提前帮忙.
更新:
调用方法:
await DeleteItemAfterTimeAsync(item.Id, new TimeSpan(0, 1, 0));
Run Code Online (Sandbox Code Playgroud)
更新方法:
public async Task DeleteItemAfterTimeAsync(int itemId, TimeSpan timeSpan)
{
// give user time to fill out data
await Task.Delay(timeSpan);
var item = db.Items.FirstOrDefault(p => p.Id == itemId);
if (item != null && item.Status == someStatus)
{
db.Items.Remove(item);
db.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
db.Items.Remove(item)发生异常;
因为您的DeleteItemAfterTimeAsync
方法是a async void
,所以无法等待它,并且在您使用db上下文时,它已经被处理掉了.
将DeleteItemAfterTimeAsync
方法更改为async Task
和await
.
归档时间: |
|
查看次数: |
2155 次 |
最近记录: |