/// <summary>
 /// Runs the async task that performs the scripting operation.
 /// </summary>
 private void RunTask <T>(RequestContext <T> context, ScriptingOperation operation)
 {
     ScriptingTask = Task.Run(async() =>
     {
         try
         {
             this.ActiveOperations[operation.OperationId] = operation;
             operation.Execute();
         }
         catch (Exception e)
         {
             await context.SendError(e);
         }
         finally
         {
             ScriptingOperation temp;
             this.ActiveOperations.TryRemove(operation.OperationId, out temp);
         }
     }).ContinueWithOnFaulted(async t => await context.SendError(t.Exception));
 }
        /// <summary>
        /// Handles request to cancel a script operation.
        /// </summary>
        public async Task HandleScriptCancelRequest(ScriptingCancelParams parameters, RequestContext <ScriptingCancelResult> requestContext)
        {
            try
            {
                ScriptingOperation operation = null;
                if (this.ActiveOperations.TryRemove(parameters.OperationId, out operation))
                {
                    operation.Cancel();
                }
                else
                {
                    Logger.Write(TraceEventType.Information, string.Format("Operation {0} was not found", operation.OperationId));
                }

                await requestContext.SendResult(new ScriptingCancelResult());
            }
            catch (Exception e)
            {
                await requestContext.SendError(e);
            }
        }
 /// <summary>
 /// Runs the async task that performs the scripting operation.
 /// </summary>
 private void RunTask <T>(RequestContext <T> context, ScriptingOperation operation)
 {
     Task.Run(() =>
     {
         try
         {
             Debug.Assert(!this.ActiveOperations.ContainsKey(operation.OperationId), "Operation id must be unique");
             this.ActiveOperations[operation.OperationId] = operation;
             operation.Execute();
         }
         catch (Exception e)
         {
             context.SendError(e);
         }
         finally
         {
             ScriptingOperation temp;
             this.ActiveOperations.TryRemove(operation.OperationId, out temp);
         }
     });
 }