private async Task EndRequest(DataBatch endBatch)
        {
            var fe = endBatch.ForwardingEndpoint;

            if (fe != null)
            {
                DebugOutput.Log("Forwarding to {0}", fe);

                using (var client = new VectorTransferClient(_serverId, fe.Port, fe.Host))
                {
                    client.CompressUsing(_compression);

                    var tx = await client.BeginTransfer(fe.PathAndQuery);

                    await tx.Send(endBatch);
                    await tx.End(endBatch.Properties);
                }
            }
        }
        private async Task Run()
        {
            using (var server = new VectorTransferServer())
            {
                server.AddHandler(server.BaseEndpoint.CreateRoute("x"), (d, r) =>
                {
                    foreach (var vect in d.Vectors)
                    {
                        Console.WriteLine(vect);
                    }

                    if (!d.KeepAlive)
                    {
                        var response = Encoding.ASCII.GetBytes("hi");
                        r.Content.Write(response, 0, response.Length);
                    }

                    return true;
                });

                server.Start();

                using (var client = new VectorTransferClient())
                {
                    using (var handle = await client.BeginTransfer("x"))
                    {
                        var data = new[] { ColumnVector1D.Create(1, 2, 3), ColumnVector1D.Create(4, 5, 6) };

                        await handle.Send(data);
                        var res = await handle.End();

                        using (var ms = new MemoryStream())
                        {
                            await res.CopyToAsync(ms);

                            var text = Encoding.ASCII.GetString(ms.ToArray());

                            Assert.That(text, Is.EqualTo("hi"));
                        }
                    }
                }
            }
        }