gpt4 book ai didi

.net - async void 方法不立即返回 (EF6)

转载 作者:行者123 更新时间:2023-12-02 05:03:38 24 4
gpt4 key购买 nike

public class MyClass
{
MyEntities db = new MyEntities();

public MyClass()
{
this.Initialise(); // Does not return immediately. Why?
}

private async void Initialise();
{
await this.db.Entities.LoadAsync();
}
}

如果我将 Initialise 更改为使用 await Task.Run() 来调用同步 this.db.Entities.Load(),那么它会按预期立即返回。

最佳答案

代码将执行到第一个等待点(对于尚未完成的数据)。请记住,Initialise 有效地:

var tmp = this.db.Entities.LoadAsync();
await tmp;

因此我们必须得出结论,LoadAsync 在它产生之前花费了非常多的时间。这完全在 API 限制之内——await API 只会帮助让事情变得可等待;它不能保证一切都是非阻塞的。例如,以下是完全可以等待的:

static Task<int> Evil() {
Thread.Sleep(60000);
return Task.FromResult(4);
}

可能是数据上下文正在加载元数据、加载程序集等 - 在它知道它是否可以屈服之前。

关于.net - async void 方法不立即返回 (EF6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16604665/

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