У меня есть метод с именем myMethodAsync
, который необходимо выполнить, создать некоторые вещи и запустить метод DoSomeWork
- однако ему не нужно ждать, пока метод будет завершен.
Это приложение asp.net core 2.0, использующее Entity Framework Core и встроенное внедрение зависимостей. Каждый класс в образце Scoped. Я использую шаблон репозитория. Нет ошибки, просто ничего не происходит. Если я устанавливаю точку останова после myRepository.GetAsync
или в методе GetAsync
, отладчик не входит.
Код:
public async Task myMethodAsync
{
...
await myRepository.AddAsync(entity);
DoSomeWork(id); // If it's lack of await the line below will not works
}
private async Task DoSomeWork(Guid id)
{
...
var someEntity = await myRepository.GetAsync(id); // This line will never be done
}
Я думал, что это потому, что myRepository
каким-то образом используется совместно, поэтому я извлек DoSomeWork
в другой класс с собственным myRepository
, но эффект тот же.
Также, если я использую Task.Run
, ничего не изменится.
Как узнать, что код никогда не выполняется? Потому что я меняю сущность и позже обновляю ее в базе Однако сущность не изменилась.
Также интересно, что следующий код почти работает:
public async Task myMethodAsync
{
...
await myRepository.AddAsync(entity);
DoSomeWork(id); // Now it almost works
await myRepository.GetAsync(randomID);
}
private async Task DoSomeWork(Guid id)
{
...
var someEntity = await myRepository.GetAsync(id); // It works now
...
await myRepository.UpdateAsync(entity); // But it doesn't work
}