关于异步/等待的我缺少什么

时间:2014-05-08 15:06:40

标签: c# asp.net-mvc async-await

我在控制器中有asp.net mvc任务:

        public async Task<ActionResult> ContactUpdate(ContactViewModel update)
        {
            if (update != null && this.ModelState.IsValid)
            {
               await new ContactRepository(this).UpdateContactAsync(update);                
            }

            return this.Json(new FormResult(this.ModelState));
        }

方法UpdateContactAsync看起来像这样:

    public async Task<int> UpdateContactAsync(ContactModel update)
    {
      Contact c = await this.Db.GetContactAsync(id);
      OtherContact oc = await this.Db.GetOtherContactAsync(id);

      // do stuff with contact and other contact

      // finally
      return await this.accessor.Db.SaveChangesAsync();

    }

上面的代码没有任何问题。

但我尝试进行一些调整以运行这两个任务,然后运行等待它们并将代码更改为以下内容:

        public async Task<int> UpdateContactAsync(ContactModel update)
        {
          var task1 = this.Db.GetContactAsync(id);
          var task2 = this.Db.GetOtherContactAsync(id);

          Contact c = await task1;
          OtherContact oc = await task2;

          // do stuff with contact and other contact

          // finally
          return await this.accessor.Db.SaveChangesAsync();

        }

并且此代码无法正常工作:第二个代码永远不会达到第二个任务等待并保存。根据我在DB Profiler上看到的情况,只有第一个任务正在运行。

1 个答案:

答案 0 :(得分:1)

实体框架每次只允许一个异步请求DbContext