Или хотя бы просто поясните, как сделать это с минимальными затратами и максимальной понятностью
Наверное вопрос аналогичен «какой тип использовать в C++ для строк». В этом отношении C# так разросся, столько вариантов один другого краше — что сложно дать однозначный совет.
Проще всего это, конечно, новая констркция async + await. Но в C#4 нужно доустанавливать AsyncCTP.