public async Task DoBusiness()
{
dbContext1.Table1.Add(entity1);
await dbContext1.SaveChangesAsync();
dbContext2.Table2.Add(entity2);
await dbContext2.SaveChangesAsync(); // throws an error, what about the first change
}
Есть ли способ гарантировать, что изменения в dbContext1 будут отменены, если второе изменение вызовет ошибку?
У меня есть транзакция, охватывающая два контекста БД, см. код ниже: [code]public async Task DoBusiness() { dbContext1.Table1.Add(entity1); await dbContext1.SaveChangesAsync();
dbContext2.Table2.Add(entity2); await dbContext2.SaveChangesAsync(); // throws an error, what about the first change } [/code] Есть ли способ гарантировать, что изменения в dbContext1 будут отменены, если второе изменение вызовет ошибку?
Недавно, когда я читал о программировании без блокировок, я наткнулся на «атомарные операции». Я начал копать вглубь этого. Все ссылки объясняют, как писать атомарные операции и их использование.
У меня есть асинхронный блок кода, который обновляет файл и его метаданные:
async for chunk in request.stream():
self.storage_strategy.update(metadata, chunk)
metadata.upload_offset += len(chunk)
self.metadata_strategy.update(metadata)...
Рассмотрим приведенный ниже фрагмент C++ 11. Для GCC и clang это компилируется в две (последовательно согласованные) загрузки foo. (Примечание редактора: компиляторы не оптимизируют атомарность, более подробную информацию см. в разделе «Вопросы и...