来自具有多个等待状态的异步功能的数据库中的空白值

时间:2018-09-10 18:02:58

标签: c# .net async-await

我也有这样的模型

public class Action () 
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Completed { get; set; }
    public DateTime CompletedOn { get; set; }

    public virtual User CompletedBy { get; set; }
}

还有一个异步函数:

public async Task<ActionResult> MarkActionCompleted(int id) 
{        
    using(MyDbContext db = new MyDbContext()) 
    {
        UserManager userManager = new UserManager(new UserStore(db));
        var user = await userManager.FindByIdAsync(User.Identity.GetUserId());
        var action = await db.Actions.SingleOrDefaultAsync(x => x.Id == id);

        if (action == null)
        {
            return new HttpNotFoundResult();
        }

        action.Completed = true;
        action.CompletedOn = DateTime.Now;
        action.CompletedBy = user;

        await db.SaveChangesAsync();

        return new HttpStatusCodeResult(HttpStatusCode.OK);
    }
}

我注意到,通过查看数据库中的所有条目,大约2%(441/21547)的记录被标记为已完成,但是CompletedBy和CompletedOn均为空。我一直在努力解决这个问题。这是修改此表的唯一功能。

所以我的问题是,我使用async / await错误吗?是否有可能在检索用户之前调用SaveChangesAsync?还是上下文有问题?我应该在某个地方使用ConfigureAwait(false)吗?

0 个答案:

没有答案