пятница, 18 мая 2018 г.

QuikTerminal, ProcessTask Example to use ProcessTask

Here is example how to use ProcessTask (with IdleCycleAction inUse)

public sealed partial class QuikTradeTerminal
    {
        public bool IsProcessTaskInUse { get; set; }

        [XmlIgnore]

        public ProcessTask<IEventArgs1> ProcessTask { get; private set; }
        private void SetupProcessTask()
        {
            if (!IsProcessTaskInUse)
            {
                Evlm2(EvlResult.WARNING, EvlSubject.TECHNOLOGY, ParentName, Name,
                MethodBase.GetCurrentMethod().Name, "ProcessTask Will NOT BE USED",
                ToString());
                return;
            }
            
            ProcessTask = new ProcessTask<IEventArgs1>();
            ProcessTask.Init();
            ProcessTask.TimeInterval = 1000;
            ProcessTask.Parent = this;
            ProcessTask.IsEveryItemPushProcessing = true;
            //ProcessTask.ItemProcessingAction = args =>
            //{
            //    try
            //    {
            //        args.ProcessingAction(args);
            //    }
            //    catch (Exception e)
            //    {
            //        SendException(e);
            //    }
            //};
            ProcessTask.ItemProcessingAction = ItemProcessingAction;
            ProcessTask.IdlingCycleAction = ProcessTaskAdditionalWork;

            Evlm2(EvlResult.SUCCESS, EvlSubject.TECHNOLOGY, ParentName, Name,

                 MethodBase.GetCurrentMethod().Name, "ProcessTask IS USED NOW",
                 ProcessTask?.ToString());
        }

        public void Start()

        {
            SetupProcessTask();

            if(IsProcessTaskInUse)

                ProcessTask?.Start();
        }
        public void Stop()
        {
            if (IsProcessTaskInUse)
                ProcessTask?.Stop();
        }
        // ************************************************
        // ProcessTask Actions
        private void ItemProcessingAction(IEventArgs1 args)
        {
            try
            {
                args.ProcessingAction(args);
            }
            catch (Exception e)
            {
                SendException(e);
            }
        }
        // AdditionalWorks in IdlingCycleAction
        private void ProcessTaskAdditionalWork()
        {
            TradeResolveProcess();
            OrderResolveProcess();
        }
    }

Комментариев нет:

Отправить комментарий