【发布时间】:2021-04-01 18:14:39
【问题描述】:
我有一个名为 Repository 的基础存储库类。谁能解释我应该如何使此类中的方法异步?
public abstract class Repository<TEntity> : IRepository<TEntity> where TEntity : Entity
{
private readonly DbContext _context;
private readonly DbSet<TEntity> _dbSet;
public Repository(DbContext context)
{
_context = context;
_dbSet = context.Set<TEntity>();
}
public TEntity Add(TEntity entity)
{
entity.CreateDate = DateTime.Now;
_dbSet.Add(entity);
Save();
return entity;
}
public void Save()
{
_context.SaveChanges();
}
}
我试图让它异步,但我无法决定添加和保存方法如何同时异步。我的实验在这里,它看起来不正确,因为它包含两个等待。
public abstract class Repository<TEntity> : IRepository<TEntity> where TEntity : Entity
{
private readonly DbContext _context;
private readonly DbSet<TEntity> _dbSet;
public Repository(DbContext context)
{
_context = context;
_dbSet = context.Set<TEntity>();
}
public async Task<TEntity> AddAsync(TEntity entity)
{
entity.CreateDate = DateTime.Now;
await _dbSet.AddAsync(entity);
await SaveAsync();
return entity;
}
public async Task SaveAsync()
{
await _context.SaveChangesAsync();
}
}
【问题讨论】:
-
您误解了
asynchronous的含义。当您await一个任务时,这意味着它不会阻塞当前线程。它只会等待awaited方法完成并返回到正在执行的线程或线程池中的任何线程(取决于await的配置方式)。 -
改进评论;始终检查
await _context.SaveChangesAsync()的返回值,以便在返回任何值之前知道保存过程是否已完成。
标签: c# asp.net-mvc asp.net-core async-await entity-framework-core