static void Main(string[] args)
        {
            using (bus = new Bus(@".\private$\testreq", @".\private$\", @".\private$\testack", null, null, null))
            {
                Console.WriteLine("Sending...");

                var atoken = bus.Async<ARequest, AResponse>(new ARequest());
                var btoken = bus.Async<BRequest, BResponse>(new BRequest());
                var ctoken = bus.Async<CRequest, CResponse>(new CRequest());
                var dtoken = bus.Async<DRequest, DResponse>(new DRequest());

                Console.WriteLine("All Sent");

                Console.WriteLine("Waiting");

                while (true)
                {
                    if (
                        !bus.IsReady<AResponse>(atoken) ||
                        !bus.IsReady<BResponse>(btoken) ||
                        !bus.IsReady<CResponse>(ctoken) ||
                        !bus.IsReady<DResponse>(dtoken))
                    {
                        Thread.Sleep(100);
                        Console.WriteLine("Waiting...");
                    }
                }

                var a = bus.GetAsyncResponse<AResponse>(atoken);
                var b = bus.GetAsyncResponse<BResponse>(btoken);
                var c = bus.GetAsyncResponse<CResponse>(ctoken);
                var d = bus.GetAsyncResponse<DResponse>(dtoken);

                Console.WriteLine("Completed.");

                Console.ReadLine();
            }
        }