мы вынуждены делать все вызовы «очень» многопоточными
Хорошо заметили. Все было бы намного проще, если бы MS позволили самим решать где применять многопоточность… А раз пошли по такому пути — то и далее нужно усложнять, а именно использовать Reactive Extensions.
То есть если хотите, чтобы все было архитектурно правильно, как задумали MS, то изучите Rx. Но предупреждаю — на их изучение уйдет минимум неделя + готовьтесь к смене парадигмы мышления.