/// <summary>
        /// Sends a message to the game coordinator as a job, waits for the job to complete, and returns the response body as an async task
        /// </summary>
        /// <returns></returns>
        protected internal async Task <T> SendJobAsync <T>(GameCoordinatorMessage message)
        {
            if (typeof(T) == typeof(GameCoordinatorMessage))
            {
                return((T)(object) await SendJobAsync(message).ConfigureAwait(false)); // ok c#
            }
            GameCoordinatorMessage response = await SendJobAsync(message).ConfigureAwait(false);

            return(response.Deserialize <T>());
        }
 private static Task InvokeGCBodyAsync <T>(GameCoordinatorMessage message, Delegate d)
 {
     return((d as Func <T, Task>)(message.Deserialize <T>()));
 }