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); }