Почему я должен использовать await для метода для асинхронного запуска. Что если я не хочу ждать окончания метода, прежде чем продолжить? [Дубликат]
На этот вопрос уже есть ответ здесь:
Запустить и забыть с помощью async против «старого асинхронного делегата» 4 ответаЯ пролистывал документы MSDN весь день, и их философия асинхронного кодирования сбивает меня с толку. Насколько я понимаю, поток, который вызывает асинхронный метод, не будет заблокирован, если вызывается асинхронный метод. Тем не менее, async всегда сопряжен в примерах с await, который, по-видимому, сводит на нет асинхронность, делая так, что внешний метод ДОЛЖЕН ждать выполнения кода в любом случае. Должен ли я быть в состоянии вызвать асинхронный метод и затем продолжить выполнение внешнего метода?
Вот сценарий, с которым я столкнулся, более или менее:
void reportSomethingHappened(info)
- Collect info
- HTTP POST info to logging server (ie. mixpanel, sentry)
И здесь будет метод вызова:
void largerProcess
if (whatever)
reportSomethingHappened();
bla;
bla;
Насколько я понимаю, поскольку запросы POST могут выполняться асинхронно, я должен быть в состоянии превратить reportSomethingHappened () в асинхронный метод (с помощью AFAIK, ожидая веб-запроса и добавляя ключевое слово async).
Но метод более крупного процесса не должен ждать (т.е. ждать), чтобы завершился метод создания отчетов, чтобы выполнить бла-бла. Тем не менее, VS говорит мне, что с помощью асинхронного метода я могу либо его дождаться, либо произойдет синхронно, и заблокировать. Разве это не противоречит цели сделать это отдельно?
Как мне написать это так, чтобы reportSomethingHappened не блокировал выполнение более крупного процесса? (Что по своей сути смущает меня, потому что я думал, что это было все время асинхронно)