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