Как понять асинхронный код, не связанный с IO - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть пробел в понимании того, как асинхронный код работает для операций без ввода-вывода.При использовании ввода-вывода очевидно, что поток не создается, поскольку операции ввода-вывода контролируются картами сетевых слов, жесткими дисками или другими вещами.Но когда у меня есть какой-то длительный метод, мне нужно сделать его Task.Run ({метод}) , но Task.Run () фактически создает / повторно использует поток из пула, и кажется, что выполнениемне как параллельно - основной поток и поток потоков пула

1 Ответ

0 голосов
/ 03 декабря 2018

Даже в случае, когда что-то связано только с процессором, async / await все еще может быть полезным:

  • не все потоки равны;в клиентских приложениях чрезвычайно выгодно освободить поток пользовательского интерфейса для выполнения таких операций, как рисование и реагирование на события цикла событий, в то время как другая работа продолжается в фоновом режиме;это можно сделать разными способами, одним из которых является: async / await;в качестве альтернативы - некоторые потоки могут работать с разными приоритетами
  • , иногда вы можете с пользой распараллелить работу, будь то вычисление чего-то другого во время выполнения рабочего потока или, возможно, разделение одного куска работы между многими потоки;в любом случае async / await можно использовать для координации («соединения») этих операций, однако
  • : если эти сценарии не применяются, и вы продвигаете работумежду потоками просто до await этого (без одновременного выполнения каких-либо других действий и без каких-либо особых условий потока) - тогда вы просто добавляете накладные расходы, используя async / await
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...