private async Task RunConnectionAsync(SiloAddress address, Connection connection)
        {
            Exception error = default;

            try
            {
                using (this.BeginConnectionScope(connection))
                {
                    await connection.Run();
                }
            }
            catch (Exception exception)
            {
                error = exception;
            }
            finally
            {
                this.OnConnectionTerminated(address, connection, error);
            }
        }
        private async Task RunConnectionAsync(Connection connection)
        {
            await Task.Yield();

            using (this.BeginConnectionScope(connection))
            {
                try
                {
                    var connectionTask = connection.Run();
                    this.connections.TryAdd(connection, connectionTask);
                    await connectionTask;
                    this.NetworkingTrace.LogInformation("Connection {Connection} terminated", connection);
                }
                catch (Exception exception)
                {
                    this.NetworkingTrace.LogInformation(exception, "Connection {Connection} terminated with an exception", connection);
                }
                finally
                {
                    this.connections.TryRemove(connection, out _);
                }
            }
        }