Почему бы не использовать многопоточность?
Подумайте об этом: поместите каждый calc в поток, а затем запустите оба. После этого заставьте программу ждать их. Только после того, как оба потока выполнят свои задания (чтение данных), вы сможете продолжить.
Помните, что потоки не могут напрямую изменять данные из другого потока, поэтому я мог бы предложить использовать Invoke или статические переменные, в зависимости от того, что вам может понадобиться.
Если возможно, вы можете использовать библиотеку Task / Parallel, в которой уже есть несколько полезных методов, чтобы помочь вам в этом.
Background Worker - это тоже путь.