Async и Await C# в потоке (Thread) без событий. Нужно ли?
Async / Await - это сахар для оптимального использования пула потоков, можно обойтись без него, а если нужно использовать все треды на полную катушку, то следует использовать Async / Await. 
Навскидку скажу только такие ситуации, где он необходим:
1) Чтобы избавиться от синхронных вызовов долгих вычислений в потоках, критичных к скорости выполнения. Как раз частный случай - пример, который описал Haze Max. Но нельзя забывать, что в WPF и WinForms, чтобы после этих вычислений что-то делать с окошком, нужно отмаршалиться обратно в UI поток.
2) Интенсивный IO - чтобы не останавливать поток, который ждет данные (либо пишет данные) от внешнего ресурса (hdd, сетевая карта например), исполнение кода следует переключать в асинхронный режим, чтобы избавиться от заморозки потока на время ожидания (пока происходит ожидание ответа, тред может выполнить какой-то еще код).
Async и Await как раз лучше применять в потоке окна, для того чтобы окно не "зависало". Но если уже есть отдельный поток для чтения из файла, то смысл в Async и Await отсутствует лучше читать его синхронно.