Ваша лучшая ставка (я думаю) состоит в том, чтобы связать уникальный идентификатор с каждой задачей, создать единый поток, который обрабатывает сетевое взаимодействие и (как вы сказали) добавляет идентификатор задачи в пакет.
На стороне получателя вы делаете то же самое: один поток читает пакеты и распределяет их содержимое согласно идентификатору задачи.