Синхронизация потоков и приостановка потоков \ Возобновление
Я пытаюсь отправить файлы с локального на FTP, для этого я блокирую TCPClient перед отправкой файла. И эта отправка файла происходит в другом потоке. Так что основной поток не пострадал.
Как и когда я пытаюсь использовать заблокированный TCPClient перед разблокировкой, он зависает. Итак, как мне поступить, чтобы одновременно я мог отправить файл и получить файл (обе функции находятся в разных потоках, но блокируют один и тот же объект TCPClient).
Я также думаю приостановить первый поток и выполнить второй, затем, когда второй завершится, и после возобновить первый.
Пожалуйста, помогите, я потерян в темах.
2 ответа
Вы не должны использовать то же самое TcpClient
из разных потоков делать разные вещи - он представляет собой одно соединение, поэтому данные, отправленные и полученные в двух разных потоках, будут мешать друг другу. (Даже если вы "отправляете" файл в одном и "получаете" файл в другом, оба должны будут отправлять и получать данные.)
Я предлагаю вам использовать два разных TcpClient
экземпляров.
TCP является двунаправленным протоколом. Даже если вы получаете файл, вы все время отправляете подтверждение. Это означает, что TCP работает в контексте: есть одна сторона получателя и одна сторона отправителя.
Вы не должны смешивать роль внутри экземпляра. Используйте 2 разных экземпляра. Они могут работать параллельно.