public void request(IRequestMonitor monitor, WebPageModel page, HandWebDataTask handTask, RepeatInfo repeat, string passingData = null)
 {
     request(monitor, page, handTask, repeat, new PassingData()
     {
         Data = passingData
     });
 }
        public void request(IRequestMonitor monitor, WebPageModel page, HandWebDataTask handTask, RepeatInfo repeatInfo, PassingData data)
        {
            if (page == null)
            {
                return;
            }
            //Cancel Previous
            ensureCancelCTS();
            cacheCTS = new CancellationTokenSource();
            var token = cacheCTS.Token;

            //Create Monitor
            if (monitor == null)
            {
                monitor = new RequestMonitor();
            }
            //Request
            var httpRequest = provideRequestTask(page.IsPost);
            var requestInfo = new HttpRequestInfo()
            {
                RequestTask       = httpRequest,
                HttpRequestConfig = httpConfig,
                RequestMonitor    = monitor,
                HandDataTask      = handTask,
                Page       = page,
                Passing    = data,
                RepeatInfo = repeatInfo,
                Token      = token
            };

            monitor.IsTaskEmpty   = false;
            monitor.IsTaskWaiting = false;
            Task.Run(() => loopingRequest(requestInfo).ContinueWith(task =>
            {
                ensureCancelCTS();
                monitor.IsTaskWaiting = false;
                monitor.IsTaskEmpty   = true;
                monitor.IsRequesting  = false;
                if (task.IsCanceled)
                {
                    monitor.OnTaskCanceled();
                }
                else if (task.IsFaulted)
                {
                    if (task.Exception.GetBaseException() != null)
                    {
                        monitor.OnFaulted(task.Exception.GetBaseException());
                    }
                }
            }));
        }
        public void formatRequest(IRequestMonitor monitor, WebPageModel page, HandWebDataTask handTask, object[] addition, RepeatInfo repeat, params string[] datas)
        {
            string data = string.Empty;

            data = string.Format(page.PostDataFormat, datas);
            request(monitor, page, handTask, repeat, new PassingData()
            {
                Data = data, Addition = addition
            });
        }