Mon*_*eur 2 .net entity-framework async-await entity-framework-6
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();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我更改Initialise以使用await Task.Run()来调用同步this.db.Entities.Load()然后它会按预期立即返回.
代码将执行到第一个等待点(对于尚未完成的数据).请记住,这Initialise是有效的:
var tmp = this.db.Entities.LoadAsync();
await tmp;
Run Code Online (Sandbox Code Playgroud)
因此,我们必须得出结论,LoadAsync在它屈服之前花了不少的时间.这完全符合API限制 - awaitAPI仅有助于使事情等待; 它不保证一切都在非阻塞.例如,以下是完全可以接受的:
static Task<int> Evil() {
Thread.Sleep(60000);
return Task.FromResult(4);
}
Run Code Online (Sandbox Code Playgroud)
可能是数据上下文正在加载元数据,加载程序集等 - 在它知道它是否可以产生之前.
| 归档时间: |
|
| 查看次数: |
680 次 |
| 最近记录: |