【问题标题】:Can I make a call to Datacontext class asynchronously in c#我可以在 C# 中异步调用 Datacontext 类吗
【发布时间】:2022-07-23 01:37:22
【问题描述】:

这里我试图从我的方法中调用 Dbcontext 对象异步。它是否会对性能产生任何影响。我知道实体框架不是线程安全的。

 private async Task HasPreviousRecords(long passengerid, long segmentid, short legnumber, long inventoryLegid, string unitdesignator)
        {
            var defaultTime = Convert.ToDateTime("9999-12-31 00:00:00.000");
            var records = _baseContext.PassengerJourneyLegVersions.Select(s => s).Where(s =>
                         s.VersionEndUTC != defaultTime &&
                         s.LiftStatus.Equals(1) &&
                         s.UnitDesignator != string.Empty &&
                         s.InventoryLegID.Equals(inventoryLegid) &&
                         s.LegNumber.Equals(legnumber) &&
                         s.SegmentID.Equals(segmentid) &&
                         s.PassengerID.Equals(passengerid)).ToList().OrderByDescending(s => s.VersionStartUTC).FirstOrDefault();
            if (records != null)
            {
                if (unitdesignator != records.UnitDesignator)
                {
                    var passengerJourneryLeg = new PassengerJourneryLeg()
                    {
                        InventoryLegid = Convert.ToInt32(inventoryLegid),
                        Legnumber = Convert.ToInt32(legnumber),
                        Passengerid = Convert.ToInt32(passengerid),
                        Segmentid = Convert.ToInt32(segmentid)
                    };
                    await PushMessageToQueue(passengerJourneryLeg);
                }
            }

        }
 

上下文类具有单例依赖生命周期

【问题讨论】:

  • 异步与线程安全无关。这是HORRIBLY效率低下:.ToList().OrderByDescending(s => s.VersionStartUTC).FirstOrDefault(); 最后,异步通常意味着在原始延迟方面存在轻微的性能影响,但您的应用程序的整体吞吐量将显着增加。也就是说,您的问题很可能不是异步与同步。它看起来像是一个写得很糟糕的 EF 查询。
  • 你在说什么“调用”?除了 David 的建议之外,您能否对使用和不使用异步的应用进行基准测试?
  • @DavidL 你能具体说明一下吗?

标签: c# sql-server linq asp.net-core entity-framework-core


【解决方案1】:

在异步方法中使用 EF 上下文是可以的,但您需要确保任何可能并行运行的方法都没有使用相同的上下文。

【讨论】:

    猜你喜欢
    • 2014-06-14
    • 2019-08-18
    • 2014-04-29
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2019-07-16
    相关资源
    最近更新 更多