I\'m looking into adding some flexibility to a class that I\'ve created which establishes a connection to a remote host and then performs an exchange of information (a handshake
You can wrap the invocation in the IAsyncResult implementation. Since I've been looking at multithreading lately, I've posted about it here (it has links to other implementations of the interface too):
http://msmvps.com/blogs/luisabreu/archive/2009/06/15/multithreading-implementing-the-iasyncresult-interface.aspx
You also have many implementations in the BCL (e.g. System.Runtime.Remoting.Messaging.AsyncResult
) - use reflector or the reference source to check them out.