/// <summary>
        /// Gets the requested execution report off of the queue.
        /// </summary>
        /// <param name="reportIdentifier">Report to retrieve.</param>
        /// <param name="numberOfOtherWaiters">Count of remaining waiters after our report arrives.</param>
        /// <returns>The execution report in question.</returns>
        public CloudExecutionReport GetReport(string reportIdentifier, out int numberOfOtherWaiters)
        {
            CloudExecutionWaiter waiter = new CloudExecutionWaiter();

            // Add the desired report to the dictionary under lock.
            this.reportWaitersLock.WaitOne();
            this.reportWaiters.Add(reportIdentifier, waiter);
            this.haveReportWaiters.Set();
            this.reportWaitersLock.ReleaseMutex();

            // Wait for report to arrive, and then return it.
            return(waiter.WaitForReport(out numberOfOtherWaiters));
        }
        /// <summary>
        /// Gets the requested execution report off of the queue.
        /// </summary>
        /// <param name="reportIdentifier">Report to retrieve.</param>
        /// <param name="numberOfOtherWaiters">Count of remaining waiters after our report arrives.</param>
        /// <returns>The execution report in question.</returns>
        public CloudExecutionReport GetReport(string reportIdentifier, out int numberOfOtherWaiters)
        {
            CloudExecutionWaiter waiter = new CloudExecutionWaiter();

            // Add the desired report to the dictionary under lock.
            this.reportWaitersLock.WaitOne();
            this.reportWaiters.Add(reportIdentifier, waiter);
            this.haveReportWaiters.Set();
            this.reportWaitersLock.ReleaseMutex();

            // Wait for report to arrive, and then return it.
            return waiter.WaitForReport(out numberOfOtherWaiters);
        }