Как уже отмечали другие, выделение другого потока для вашего процесса повлияет на вас, когда вы используете синхронный метод при увеличении количества одновременных подключений.
Однако, если вы знаете, что у вас когда-либо будет только небольшое количество соединений, я бы сказал, что это станет стиркой, и вам следует выбрать метод, наиболее естественный для вашего приложения.
В случае, когда издержки потока незначительны, я ожидал бы, что два сценария будут разыгрываться следующим образом.
Асинхронный:
- Вы звоните в BeginRead / BeginWrite
- «Система» (framework / OS) информируется о том, что вы хотите
- Чтение / запись завершено
- «Система» сообщает потоку в пуле потоков, чтобы он вызывал ваш обратный вызов
- Вы делаете все, что нужно для завершения операции
Синхронно в другом потоке:
- Вы получаете поток из пула потоков для обработки ввода-вывода
- Вы звоните, чтобы прочитать / написать
- «Система» (framework / OS) информируется о том, что вы хотите
- Чтение / запись завершено
- Вы делаете все, что нужно для завершения операции
Единственное отличие здесь заключается в том, что шаг 4 из асинхронного вызова становится шагом 1 в синхронном случае в другом потоке.