Wow! Isn't that obvious that you try to defeat the purpose of nearly everything you try here?
Using
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite)
is the same as not using the thread at all. There is not situation when such kind of sleep is useful. You artificially create unavailable thread and as a work-around you create yet another thread! What an abuse!
First of all, once you use threads (and yes, you should better do all networking in separate threads), why using asynchronous sockets at all? Instead, use threads and use blocking calls. When the thread is using blocking call, it's also "sleeping", but sleeping in a "productive manner", it enters the wait state when it is switched off by the system and is not scheduled back to execution (so it waste zero CPU time) until it is waken up. What wakes it up include: completion of blocking method call, timeout,
Thread.Interrupt
or
Thread.Abort
.
Perhaps you need to rethink the whole design. I don't know what you want to achieve, but please look at some my past answers to get an idea on working variants of design:
Multple clients from same port Number[
^].
This is my collection of links to some my past answers on threading:
How to get a keydown event to operate on a different thread in vb.net[
^],
Control events not firing after enable disable + multithreading[
^].
—SA