/// <summary>
        /// Runs an isolated task on the client.
        /// </summary>
        /// <param name="isolatedTaskType">The type of isolated task to run.</param>
        /// <param name="args">The isolated task arguments.</param>
        /// <returns>The isolated task result.</returns>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="isolatedTaskType"/> is null.</exception>
        public object RunIsolatedTaskOnClient(Type isolatedTaskType, object[] args)
        {
            if (isolatedTaskType == null)
            {
                throw new ArgumentNullException("isolatedTaskType");
            }

            Guid id = Guid.NewGuid();
            IsolatedTaskState state = new IsolatedTaskState();

            try
            {
                lock (activeTasks)
                    activeTasks.Add(id, state);

                messageExchange.Publish(new RunIsolatedTaskMessage()
                {
                    Id = id,
                    IsolatedTaskType = isolatedTaskType,
                    Arguments        = args
                });

                return(state.WaitForCompletion());
            }
            finally
            {
                lock (activeTasks)
                    activeTasks.Remove(id);
            }
        }
        /// <summary>
        /// Runs an isolated task on the client.
        /// </summary>
        /// <param name="isolatedTaskType">The type of isolated task to run.</param>
        /// <param name="args">The isolated task arguments.</param>
        /// <returns>The isolated task result.</returns>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="isolatedTaskType"/> is null.</exception>
        public object RunIsolatedTaskOnClient(Type isolatedTaskType, object[] args)
        {
            if (isolatedTaskType == null)
                throw new ArgumentNullException("isolatedTaskType");

            Guid id = Guid.NewGuid();
            IsolatedTaskState state = new IsolatedTaskState();

            try
            {
                lock (activeTasks)
                    activeTasks.Add(id, state);

                messageExchange.Publish(new RunIsolatedTaskMessage()
                {
                    Id = id,
                    IsolatedTaskType = isolatedTaskType,
                    Arguments = args
                });

                return state.WaitForCompletion();
            }
            finally
            {
                lock (activeTasks)
                    activeTasks.Remove(id);
            }
        }