Из того, что я понял во всех уроках асинхронного / await в C #, я понял, что когда мы определяем асинхронный метод, это означает, что мы можем добавить ключевое слово await внутри него с задачей в качестве параметра, чтобы метод возвращался квызывающий, если задача слишком длинная.Затем метод может возобновиться после завершения задачи.
public void MyMainMethod()
{
DoSomethingAsync();
KeepOnDoingOtherStuff();
}
public async Task DoSomethingAsync()
{
//Do whatever
await LongOperation();
// Rest of the method that is executed when the long operation is
//finished.
}
Таким образом, здесь, в то время как выполняется длинная операция, как и ожидается, асинхронная операция DoSomething передает руку MainMethod и выполняется KeepOnDoingOtherStuff.ОК
Теперь моя проблема в том, что сам мой DoSomethingAsync ожидается.В этом случае:
public async void MyMainMethod()
{
await DoSomethingAsync();
//Here is a critical method that I want to execute only when
//DoSomethingAsync is finished
CriticalStuff();
}
public async Task DoSomethingAsync()
{
//Do whatever
await LongOperation();
// Rest of the method that is executed when the long operation is
//finished.
}
Теперь я жду своего DoSomethingAsync, так что я уверен, что он не идет дальше, но проблема в том, что DoSomethingAsync () все еще дает руку вызывающей стороне, когда он ожидаетLongOperation (), и мой метод Main возобновляется, чего я не хочу, потому что он выполняет мою критическую вещь.
В асинхронной логике я что-то очень упускаю, что тогда было бы смысл «ждать»метод, который имеет асинхронные методы внутри него?
Я был бы очень признателен за решение моей проблемы.
Заранее спасибо.