Я знаю, что это спорная тема, и я думаю, что он заслуживает спорный ответ, так вот он идет:
1002 *
Прежде всего , позвольте мне сделать это ясно, что
DoSomething2
является блокирующимСпособ;это означает, что он будет работать в вызывающем потоке и блокировать вызывающий поток, в то время как
DoSomething1
не будет блокировать вызывающий поток и вместо этого будет работать в потоке пула потоков.
Теперь, исходя из моего понимания асинхронных методов, их единственная цельэто позволить параллельность и, следовательно, максимальное использование вашего процессора.С точки зрения разработчика настольных систем это означает, что при вызове асинхронного метода вы можете иметь отзывчивый пользовательский интерфейс и обновлять пользовательский интерфейс во время выгрузки работы в неосновную ветвь.
Если ваше приложение предназначено для запускаединиц работы параллельно, тогда для меня имеет смысл использовать DoSomething1
вместо DoSomething2
, поскольку вы могли бы максимально использовать свой ЦП, но если ваше приложение предназначено для последовательного выполнения единиц работы (какЯ полагаю, что вы делаете это в своем консольном приложении) вы не получите никакой выгоды от использования DoSomething1
, поскольку одновременно будет выполняться только одна операция, и я бы вместо этого использовал DoSomething2
.
СПри этом вы можете использовать AsyncContext.Run(() => MyMethodAsync(args));
в своем консольном приложении для запуска асинхронного метода в отдельном контексте.
Подводя итог, если ваше консольное приложение не выполняет параллельную работу над потоками, я бы сказал, что вы будетенормально используя DoSomething2
.
PS вы должны исправить ошибку, упомянутую @ AydinAdn.