public async Task Run(CancellationToken cancel_token)
{
try {
cancel_token.ThrowIfCancellationRequested();
await Handshake(cancel_token);
await RecvAndProcessMessages(cancel_token);
}
catch (IOException e) {
if (!disposed) {
logger.Error(e);
}
}
catch (AggregateException e) {
if (!disposed) {
logger.Error(e);
}
}
finally {
Close();
}
}