Я не думаю, что разница обычно будет огромной, но я бы предпочел полностью асинхронный подход (Begin ... / End ...), если я ожидаю паузы во входящем потоке, так что обратный вызов может быть выгружен несколько слоев, а не требуя дополнительной нити. Еще одним преимуществом асинхронного подхода является то, что вы всегда можете получить необходимые данные, поставить в очередь другую асинхронную выборку и затем обработать новые данные в существующем асинхронном потоке , предоставив еще несколько вариантов параллелизма (одно чтение, одна обработка). Конечно, это можно сделать и вручную (возможно, с использованием рабочей очереди).
Вы можете, конечно, профиль ...