예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="submittedTask"></param>
        public ScheduledTask(IRunnableTask submittedTask)
        {
            _submittedTask = submittedTask;

            TaskId = submittedTask.Id;

            _tokenSource = new CancellationTokenSource();
        }
        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;
            }
        }
예제 #3
0
        public void SubmitTask(IRunnableTask task)
        {
            var scheduledTask = new ScheduledTask(task);

            _scheduledTasks.Add(scheduledTask);
        }