什么时候在EF Core中使用Async方法?

问题描述 投票:0回答: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.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列表怎么办?

c# visual-studio entity-framework-core core asp.net-core-3.1
1个回答
0
投票

是不是只有在调用方法后还需要变量的时候才需要?

一般来说,如果有异步API,那么你应该在新代码中使用它们。

异步代码可以释放调用线程。如果你的应用是GUI应用,这可以释放UI线程;如果你的应用是服务器应用,这可以释放线程来处理其他请求。


0
投票

经验法则是在任何线程上使用异步,因为它的 忙碌型 等待,会妨碍其他线程的运行。因为使用async会有等待的操作,把它踩在一边,直到数据返回。

因此,如果你有一个处理多个调用的web服务,使用asyncawait是很好的实现,以保持web服务的响应。

© www.soinside.com 2019 - 2024. All rights reserved.