С помощью launch вы запускаете suspend-метод sendString()(корутину, по сути) выполняться асинхронно. Поскольку метод содержит бесконечный цикл, то запуская его синхронно вы не даёте программе делать ничего другого.
Можете, пожалуйста, объяснить, что тогда делает ключевое слово suspend? Ведь channel.send() должен саспендить функцию, пока не будет вызван receive. По какой причине цикл продолжается?
SashaFarkas. suspend в котлине, говорит, что выполнение функции может быть приостановлено. В данном случае, в ожидание встаёт весь основной поток, и дальше первого вызова sendString выполнение не идёт. Читаем доки.