Sometime after that the other action runs and it retrieves the data that has not been read to this point and then sends a completion to a client that isn't expecting it. The server can create a thread to start processing but it'll have to send back a confirmation packet to let the client know it has received the data.
If you have multiple threads reading data while other threads are writing you cannot easily guarantee this behavior. Meanwhile the 3rd action that would have gotten queued now reads data that has already been read and probably generates an error.
I even tested it connecting from my phone to the winders machine. The next post to follow as soon as I write the code will be the client side, which will just simply open a socket and blast some data to our server.
In general, high performance TCP servers allocate a separate thread to each unique client.
I'm just not sure how to subclass BGW to reuse its functionality. Example - The client starts sending a message but hasn't sent it all yet - DataAvailable is raised with a portion of the message that was sent - Action is pushed into your queue and processing may or may not begin - Client finishes sending message - DataAvailable is raised again with the rest of the message - Action is pushed into your queue and processing may or may not begin - More data arrives from somebody else At any point after the action gets pushed into your queue your logic may run which may or may no have all the data.