Async и Await C# в потоке (Thread) без событий. Нужно ли?

Пытаюсь разобраться, где можно применять async и await, а где лучше без него обойтись.
Правильно ли я понимаю что в "простом" потоке, который не использует событийную модель нет смысла использовать async и await. Например, чтение файла из диска в MemoryStream. Допустим, в потоке кроме чтения файла ничего не происходит - тогда лучше прочитать его синхронно?

Фактически, как написал Haze Max Async и Await лучше применять в потоке окна.
Остается вопрос: а для потоков которые используют события (например по таймеру)?
Просто хочеться быть уверенным на 100% ))
  • Вопрос задан
  • 707 просмотров
Решения вопроса 1
@Hydro
C#/.NET Developer
Async / Await - это сахар для оптимального использования пула потоков, можно обойтись без него, а если нужно использовать все треды на полную катушку, то следует использовать Async / Await.
Навскидку скажу только такие ситуации, где он необходим:
1) Чтобы избавиться от синхронных вызовов долгих вычислений в потоках, критичных к скорости выполнения. Как раз частный случай - пример, который описал Haze Max. Но нельзя забывать, что в WPF и WinForms, чтобы после этих вычислений что-то делать с окошком, нужно отмаршалиться обратно в UI поток.
2) Интенсивный IO - чтобы не останавливать поток, который ждет данные (либо пишет данные) от внешнего ресурса (hdd, сетевая карта например), исполнение кода следует переключать в асинхронный режим, чтобы избавиться от заморозки потока на время ожидания (пока происходит ожидание ответа, тред может выполнить какой-то еще код).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
hazemax
@hazemax
code since 2010
Async и Await как раз лучше применять в потоке окна, для того чтобы окно не "зависало". Но если уже есть отдельный поток для чтения из файла, то смысл в Async и Await отсутствует лучше читать его синхронно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы