我已经下载了 EF6 (为了使用 async
)
所以我写了这个简单的方法:
public async Task<List<int>> MyasyncMethod()
{
var locations = await MyDumpEntities.AgeGroups.Select(f=>f.endYear).ToListAsync();
return locations;
}
...Later...
DumpEntities1 MyDumpEntities = new DumpEntities1();
var data = MyDumpEntities.AgeGroups.ToListAsync();
MyasyncMethod().ContinueWith(s => { Response.Write("f"); });
MyDumpEntities.Dispose();
但是我在屏幕上看不到任何东西,当我检查 data
时,我看到了这个:
附注这是 ToListAsync
签名
我错过了什么?
最佳答案
基于评论和您有问题的行:
var data = MyDumpEntities.AgeGroups.ToListAsync();
什么会data
类型是? Task<List<AgeGroup>>
.没错,不是List<AgeGroup>
.
所以,你要么必须标记 Page_Load
作为异步(如果可能):
public async void Page_Load(object sender, EventArgs e)
{
using(var MyDumpEntities = new DumpEntities1())
{
var data = await MyDumpEntities.AgeGroups.ToListAsync();
}
}
或者以某种方式等待执行(继续,阻塞等待)。
另一件事(如果我错了,其他人可能会更正),但由于您在第二次调用中使用延续,所以我会非常小心地处理延续之外的上下文。结果可能是您先发制人地处置了上下文。在这种特殊情况下,您没有在延续中使用上下文,但它看起来很可疑......
所以我要么
MyasyncMethod().ContinueWith(s => { Response.Write("f"); MyDumpEntities.Dispose();});
或者只使用 async
还有
var result = await MyasyncMethod();
Response.Write("f");
MyDumpEntities.Dispose();
并添加Async="True"
到页面指令
关于c# - EntityFramework (6) 和异步(waitingForActivation)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17587157/