c# - EntityFramework (6) 和异步(waitingForActivation)?

标签 c# entity-framework .net-4.5 async-await entity-framework-6

我已经下载了 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 时,我看到了这个:

enter image description here

附注这是 ToListAsync 签名 enter image description here

我错过了什么?

最佳答案

基于评论和您有问题的行:

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/

相关文章:

c# - Visual Studio在编辑器中显示源代码时正在检测错误,并且在生成用于在 Debug模式下执行的代码时未看到任何错误

wcf - 自跟踪实体 - AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突

c# - 预定义类型 System.Object 未定义或导入

c# - EventHandler 在 .dll 中始终为 null,从另一个类订阅

c# - 如何将数据 View 从第 i 行过滤到第 j 行? (C#)

c# - 在 C# 中用常量乘/加大量数字的高性能方法是什么?

c# - ashx 请求中的 Session.SessionId 持久化

entity-framework - ...可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束

asp.net-mvc - 使用 ToExpando 方法的问题

c# - 如何取消等待中的任务?