internal ClientRequestInfo(string typeName, string[] args) { TaskExecutionRequest = new STask() { Id = Guid.NewGuid().ToString(), STaskTypeName = typeName, STaskParameters = args }; CompletionSource = new TaskCompletionSource <TResult>(); }
internal static void Start(STask stask, ITaskUpdateCallback callback) { try { //// Step 1.a //var rtasks = CompositionUtil.ContainerInstance.GetExports<IRunnableTask>(); //// Step 1.b //var rtask = from t in rtasks // where t.Value.GetType().FullName == stask.STaskTypeName // select t.Value; IRunnableTask rtask = null; switch (stask.STaskTypeName) { case "NumberOfEvenCTask": rtask = new NumberOfEvenCTask(); break; } if (rtask != null) { // Step 2 var cs = new CancellationTokenSource(); var ct = cs.Token; _cancellationSources.TryAdd(stask.Id, cs); // Step 3 Task <object> .Run(rtask.Run(ct, stask.STaskParameters), ct) .ContinueWith(tes => UpdateStatus(tes, stask, callback)); } } catch (Exception ex) { throw ex; } }