c# - BeginTransaction() 与 BeginTransactionAsync() 对性能有何影响

标签 c# asp.net-core entity-framework-core asp.net-web-api2

我有一个原子事务的实现,其中在异步 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只有在需要数据库请求的实体中有特殊值生成时才需要。

关于c# - BeginTransaction() 与 BeginTransactionAsync() 对性能有何影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66107820/

相关文章:

asp.net-core - 无法使用 Ubuntu 20.04 使 Net5 工作(OpenSSL 连接问题)

asp.net-core - 在 Asp Net Core 中使用全局异常处理程序和自定义中间件

c# - Entity Framework 核心缺乏适度的 LINQ 查询支持的最佳解决方案是什么?

c# - 从函数中检索参数

C# - System.Transactions.TransactionScope

c# - 在 C# 中为部分类生成单独的文件

c# - HttpRequestMessage 更改 cookie 值

c# - 有没有办法获取在 Kestrel/ASP.NET Core 中请求队列中花费的时间?

c# - System.Text.Json.JsonException : A possible object cycle was detected

c# - 将实体添加到上下文时将 GUID 保留为空