В дополнение к стандартным нитям. Одна вещь, которую нужно использовать - это асинхронные методы многих классов, которые могут это сделать. Это включает запросы веб-службы, операции чтения / записи файла.
Одна вещь, на которую стоит обратить внимание, это сопрограммы, используемые в основном Caliburn.Micro . Но это не стандартный способ сделать это.
Также .NET 4 добавляет класс Task вместе с ParallelExtensions, который способен упростить некоторые операции асинхронного программирования. Но это по-прежнему неуклюже, поэтому в .NET 5 добавлена модель асинхронного программирования, которая делает работу еще проще. Но бог знает, когда его выпустят.