Ваш код как «правильный», то есть он не имеет фундаментального недостатка.
Давайте проанализируем, что происходит, и мои 2 цента на них:
При выполнении запроса к БД (FirstAsync
) использование await
означает, что инструкции будут выполняться последовательно, но поток не будет заблокирован (асинхронный вызов) и может использоваться для других целей. Вероятно, это хорошая вещь, если это серверное приложение, вы можете захотеть, чтобы ваши потоки могли обрабатывать другие запросы в ожидании ответа БД.
Использование non-asyn c SaveChanges
однако заблокирует поток. Само по себе это не ошибка, но, поскольку это также операция ввода-вывода в БД, он может блокировать поток на некоторое значительное время. Действительно, это выглядело бы более «последовательным», если бы вы также await
имели здесь также версию asyn c.
Это проблема? Это зависит. Ваше приложение интенсивно используется? Ваши пользователи испытывают низкую реактивность при большой нагрузке? Тогда в этом случае может быть потенциальным улучшением использование asyn c при сохранении.
В противном случае, и, как предлагается в связанной статье MSDN, до тех пор, пока вы не узнаете, что это оказывает влияние, мой совет будет не слишком много переживаю.
Сочетание употреблений само по себе не является проблемой.
Лично я бы go предложил бы также асин c SaveChanges, для согласованности и воображения, что Запись в БД - это некоторая операция ввода-вывода, которая может быть медленной.
Если это настольное приложение, просто убедитесь, что вы не блокируете поток пользовательского интерфейса.