Вы, похоже, путаете асинхронность с параллелью.Они оба основаны на задачах, но они совершенно разные.Не думайте, что async
методы работают параллельно - они не работают.
Асинхронные по умолчанию работают в том же потоке , если только нет причин, заставляющих асинхронный двигатель вращатьсяновый поток, например, когда основной поток не имеет сообщения сообщений.Но в целом я склонен думать, что ключевое слово async
работает в том же потоке.
Вы используете WinForms, поэтому в потоке пользовательского интерфейса есть насос сообщений.Следовательно, весь ваш код, приведенный выше, выполняется в потоке пользовательского интерфейса .
Вы должны понимать, что NOT ввел здесь какой-либо параллелизм.С помощью ключевого слова async
вы ввели асинхронные операции, NOT параллельные.Вы не сделали ничего, чтобы «сделать ваш пользовательский интерфейс отзывчивым», за исключением одного звонка на DownloadStringTaskAsync
, который не заставит вас ждать поступления данных, но вы STILL должны выполнить всю сетьобработка (поиск DNS и т. д.) в потоке пользовательского интерфейса - вот асинхронная операция в игре (вы, по сути, «экономите» время ожидания загрузок).
Чтобы пользовательский интерфейс реагировал, вам нужно вращатьотнимать трудоемкую работу в отдельном потоке, оставляя поток пользовательского интерфейса свободным.Вы не делаете это с ключевым словом async
.
Вам необходимо использовать Task.Factory.StartNew(...)
, чтобы явно раскрутить новый поток для выполнения фоновой обработки.