Я использую ASP.NET Core и EF Core, у которых есть SaveChanges
и SaveChangesAsync
.
Перед сохранением в базе данных, в моем DbContext
, я выполняю некоторые проверки/протоколирование:
public async Task LogAndAuditAsync() {
// do async stuff
}
public override int SaveChanges {
/*await*/ LogAndAuditAsync(); // what do I do here???
return base.SaveChanges();
}
public override async Task<int> SaveChangesAsync {
await LogAndAuditAsync();
return await base.SaveChanges();
}
Проблема заключается в синхронном SaveChanges()
.
Я всегда делаю "асинхронный путь вниз", но здесь это невозможно. Я мог бы перепроектировать, чтобы иметь LogAndAudit()
и LogAndAuditAsync()
, но это не СУХОЙ, и мне нужно будет изменить дюжину других основных фрагментов кода, которые не принадлежат мне.
Есть много других вопросов по этой теме, и все они являются общими, сложными и полными дебатов. Мне нужно знать самый безопасный подход в этом конкретном случае.
Итак, в SaveChanges()
, как мне безопасно и синхронно вызывать метод async без взаимоблокировок?