Wrapper around System.Net.WebSockets.ClientWebSocket that provides event based interface to exchange text messages over Web Sockets. Support cancellation
from @Ruhrpottpatriot:
I find it a bit counter intuitive, how you handled the keep alive process. If I understood it correctly, you call OpenAnsyc() and that Task only completes when the connection is closed.
Maybe change the code, so that every public async method accepts a CancellationToken and the receive Task is decoupled from ConnectAsync().
TaskCompletionSource could be an option. I'll look into it.