You keep calling mySend.BeginInvoke (). Therefore, the garbage collector always sees a reference to the mySend object in the threadpool thread stack. And thus, do not collect it. And the code continues to work forever, of course.
The non-excitation of EndInvoke () in this scenario is a bad idea, it leaks resources for 10 minutes for each call to BeginInvoke (). The remote access lifetime, remote connection is the basic plumbing that implements the delegate's BeginInvoke () method.
It's hard to find suggestions for cleaning up the code; it just doesn't make sense to do this. You could also start the stream with while (true) {} loop. It will definitely be more effective.
source share