我正在使用带有以下CRUD操作的SQL数据库构建应用程序:
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 = await _dbContext.Foos.FindAsync(id);
一样
如果我要传递要添加到数据库中的Foos列表怎么办?
答案 0 :(得分:0)
经验法则是在繁忙类型等待的任何线程上使用异步,这会妨碍其他线程。对于异步的使用,将具有等待将其搁置一旁直到数据返回的操作。
因此,如果您有一个可处理多个呼叫的Web服务,则可以很好地实现使用异步/等待以保持Web服务的响应性。
答案 1 :(得分:0)
仅在调用方法后仍需要变量时才需要吗?
通常来说,如果有异步API,则应将它们用于新代码。
异步代码释放了调用线程。如果您的应用程序是GUI应用程序,则可以释放UI线程。如果您的应用程序是服务器应用程序,则可以释放线程来处理其他请求。