C# 何时在EF Core中使用异步方法?
我正在使用SQL数据库构建一个应用程序,并使用以下CRUD操作:C# 何时在EF Core中使用异步方法?,c#,visual-studio,entity-framework-core,core,asp.net-core-3.1,C#,Visual Studio,Entity Framework Core,Core,Asp.net Core 3.1,我正在使用SQL数据库构建一个应用程序,并使用以下CRUD操作: public Foo Add(Foo foo) { _dbContext.Foos.Add(foo); _dbContext.SaveChanges(); return foo; } public Foo Delete(int id) { Foo foo = _dbContext.Foos.Find(id); if(foo != null) { _dbContext
public Foo Add(Foo foo)
{
_dbContext.Foos.Add(foo);
_dbContext.SaveChanges();
return foo;
}
public Foo Delete(int id)
{
Foo foo = _dbContext.Foos.Find(id);
if(foo != null)
{
_dbContext.Foos.Remove(foo);
_dbContext.SaveChanges();
}
return foo;
}
但是,其中一些方法具有异步版本。以下仍然有效:
public async Task<Foo> Add(Foo foo)
{
await _dbContext.Foos.AddAsync(foo);
await _dbContext.SaveChangesAsync();
return foo;
}
public async Task<Foo> Delete(int id)
{
Foo foo = await _dbContext.Foos.FindAsync(id);
if(foo != null)
{
_dbContext.Foos.Remove(foo);
await _dbContext.SaveChangesAsync();
}
return foo;
}
公共异步任务添加(Foo-Foo)
{
wait_dbContext.Foos.AddAsync(foo);
wait_dbContext.saveChangesSync();
返回foo;
}
公共异步任务删除(int-id)
{
Foo-Foo=wait_-dbContext.Foos.FindAsync(id);
如果(foo!=null)
{
_dbContext.Foos.Remove(foo);
wait_dbContext.saveChangesSync();
}
返回foo;
}
是否只有在调用方法后仍然需要变量时才需要
在Foo-Foo=await\u dbContext.Foos.FindAsync(id)中代码>
如果我传入一个要添加到数据库的foo列表,该怎么办?经验法则是在任何线程上使用async,因为它的繁忙类型等待会妨碍其他线程。对于async的使用,将有等待将其放在一边直到数据返回的操作
因此,如果您有一个处理多个调用的web服务,那么使用async/await可以很好地实现以保持web服务的响应性
是否只有在调用方法后仍然需要变量时才需要
一般来说,如果有异步API,那么您应该将它们用于新代码
异步代码释放调用线程。如果您的应用程序是GUI应用程序,这可以释放UI线程;如果您的应用程序是服务器应用程序,这可以释放线程来处理其他请求。实际的“经验法则”比这更复杂。通常,当您想要阻止当前运行的线程时,可以使用async Wait。这将释放线程用于其他任务(如更新UI),同时等待异步结果。这个问题处理得很好。详细描述了异步等待在引擎盖下的工作方式。