Пустые значения в БД из асинхронной функции с несколькими ожиданиями - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть такая модель

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) где-нибудь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...