private async Task <T> SendRequest <T>(T apiCall) where T : IApiCall
        {
            Debug.WriteLine(String.Format("Sending {0}", apiCall.GetType().Name));

            while (Interlocked.Read(ref callCount) > 0)
            {
                Thread.Sleep(100);
            }

            Interlocked.Increment(ref callCount);

            var data    = BuildPayload(apiCall);
            var message = messageService.BuildMessage(data);
            var frame   = frameFactory.BuildSingleFrame(message.Serialize());
            await frameService.SendFrameAsync(frame);

            eventWaitHandle.WaitOne();

            Interlocked.Decrement(ref callCount);

            return(apiCall);
        }