c# - BeginTransaction() 与 BeginTransactionAsync() 的性能影响是什么
问题描述
我有一个原子事务的实现,其中许多上下文在异步 HTTP POST 方法中被更新。
在事务实现之前,我正在异步操作我的上下文,例如 ( await _context.Foo.AddAsync(trade);
await _context.SaveChangesAsync();
)
在了解了转换的必要性并看到了许多同步示例之后,我决定同步实现它们:
using (var transaction = _context.Database.BeginTransaction())
{
//_context.Database.Log = Console.WriteLine();
try
{
_context.Foo.Add(foo);
_context.SaveChanges();
_context.TradeItems.AddRange(new List<Bar>{});
_context.SaveChanges();
transaction.Commit();
由于原子性对我来说是一个优先事项,所以我可以这样做。
但是,我应该改为异步吗?BeginTransaction() 与 BeginTransactionAsync() 的性能影响是什么
解决方案
引入了异步函数版本以重用“等待”操作完成的线程。如果您的应用程序有很多同时请求 - 异步调用是一个好处。
如果您真的关心性能和服务器资源,请重写您的代码以使用异步版本。并且不要SaveChanges
在每次操作后调用。
using (var transaction = await _context.Database.BeginTransactionAsync())
{
try
{
_context.Foo.Add(foo);
_context.TradeItems.AddRange(new List<Bar>{});
await _context.SaveChangesAsync();
await transaction.CommitAsync();
}
AddAsync
仅需要您在需要数据库请求的实体中生成特殊值。
推荐阅读
- reactjs - useEffect 中的更新状态显示警告
- python - 如何在图形上绘制和获取两条相交线的坐标?
- php - 如何通过 laravel 检索列出的表单参数
- git - 解决所有合并冲突并提交后我该怎么办?
- python-3.x - 使用 sparkSession.createDataFrame 以 parquet 格式一次将多行写入 s3
- unity3d - Unity语音识别器,如何与if语句结合使用
- python - 根据条件合并数据框
- javascript - 在 BottomTabNavigator react-navigation v5 中嵌套 StackNavigator
- c++ - 用于计算 C++ 中所有换行符的正则表达式
- python - 每个月的第二个最后一个星期二