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