Traditionell sieht es bei mir (allerdings C++) halt so aus:
...
Socket.Connect(Destination,std::bind(&TelnetClass::ConnectComplete,shared_from_this(),std::placeholders::_1));
...
Hier wird der connect asynchron durchgefĂĽhrt, und am Ende dann eben ConnectComplete() mit einem std::error_code aufgerufen.
Boost asio sieht in Details anders aus, macht aber dasselbe -- leider hat das Projekt aus dem ich das gerade rauskopiert habe kein boost :-(