【发布时间】: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