gpt4 book ai didi

c# - 异步EF 6.0比同步花费的时间更长

转载 作者:太空宇宙 更新时间:2023-11-03 18:06:34 27 4
gpt4 key购买 nike

 static void Main(string[] args)
{

Stopwatch stopWatch = new Stopwatch();

stopWatch.Start();
Task t = MainAsync();
t.Wait();

stopWatch.Stop();
var sec = stopWatch.ElapsedMilliseconds;


}


static async Task MainAsync()
{
FutureEntityTestEntities db = new FutureEntityTestEntities();

var q1 = await db.Table1.ToListAsync();


var q2 = await db.Table1.ToListAsync();



}


该查询平均需要2700毫秒。

但是,当我只是在不进行异步的情况下正常列表时,它需要1800毫秒;

  static void Main(string[] args)
{
FutureEntityTestEntities db = new FutureEntityTestEntities();

Stopwatch stopWatch = new Stopwatch();

stopWatch.Start();

var q1 = db.Table1.ToList();

var q2 = db.Table1.ToList();

stopWatch.Stop();
Console.WriteLine(stopWatch.ElapsedMilliseconds);
Console.ReadLine();
}


问题是我不明白,它应该花什么时间同步时间除以2 = 900毫秒,但它又增加了900毫秒,这是很奇怪的。

编辑:Thx为答案。我修改了代码,如下所示:

static void Main(string[] args)
{
Stopwatch stopWatch2;
Stopwatch stopWatch = new Stopwatch();

stopWatch.Start();
Task t = MainAsync();


stopWatch.Stop();
Console.WriteLine(stopWatch.ElapsedMilliseconds);
Console.ReadLine();

}


static async Task MainAsync()
{
FutureEntityTestEntities db = new FutureEntityTestEntities();

Task<List<Table1>> q1 = db.Table1.ToListAsync();

Task<List<Table1>> q2 = db.Table1.ToListAsync();

await Task.WhenAll(q1, q2);

}


现在平均需要500毫秒。

我将在互联网上研究原因并在此处发布答案,如果有人有答案,请回复。

最佳答案

如果这是您期望的,那么您不会同时执行两个.ToListAsync()。如果希望它们同时执行,则需要执行以下操作:

// Kick off both queries concurrency
Task<List<Table1>> q1 = db.Table1.ToListAsync();
Task<List<Table1>> q2 = db.Table1.ToListAsync();

// Wait for both to finish before returning
await Task.WhenAll(q1, q2);

关于c# - 异步EF 6.0比同步花费的时间更长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27724502/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com