Я думаю, что оба варианта хороши. Это также зависит от того, сколько мест вы бы использовали этот метод для получения данных. Если он используется в нескольких местах, было бы разумно организовать потоки в классе, который извлекает файл.
Я бы лично выбрал последний, потому что это дало бы мне больше гибкости, если бы мне нужно было использовать его в большем количестве мест (возможно, позже).
При размышлении над этим вопросом на ум приходят префиксные методы BeginDoSomeOperation и EndDoSomeOperation, которые дадут еще немного кредитов последнему варианту.