Joe*_*ill 3 c# linq entity-framework async-await
我仍然是异步的新手,所以我不确定我所做的是否是多余的.以下从数据库中删除一行:
public static async Task Remove(int id)
{
using (var ctx = new StoreContext())
{
ctx.Products.Remove(await ctx.Products.SingleOrDefaultAsync(x => x.ID == id));
await ctx.SaveChangesAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
我应该在这里等待两次还是没有意义?据我所知,两者都awaits
提高了响应能力,而.Remove
自身"阻止"响应时间几乎不明显,这是正确的吗?
在你的情况下async/await
,与某些事情的执行速度无关.它用于在I/O完成时挂起线程,因此操作系统可以将其重用于当前需要线程的任何其他内容.简而言之,它就是可扩展性.上面的代码进行了2次I/O调用,一次用于检索,一次用于删除(调用时SaveChangesAsync
).
您可以简化此操作,只需拨打1次删除即可,但这与async/await无关.在上面的代码中,如果您已经知道主键,则没有理由首先转到数据库(假设此处ID是主键).
public static async Task Remove(int id)
{
using (var ctx = new StoreContext())
{
var product = new Product { ID = id};
ctx.Products.Attach(product);
ctx.Products.Remove(product);
await ctx.SaveChangesAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
只要DbSet<T>.Remove
它在内部"排队"一个删除操作,然后在调用SaveChanges或SaveChangesAsync时执行该操作.它不会"阻止"任何东西,但如果您不相信,也许您应该详细说明单词块的含义.
归档时间: |
|
查看次数: |
523 次 |
最近记录: |