コード例 #1
0
        public static void Init()
        {
            var random = new Random();

            var task = IntervalTask.CreateTask(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    if (IntervalTask.Current.ShuttingDown)
                    {
                        // ASP.Net is shutting down - stop doing heavy stuff
                        // and quit out gracefully
                        return;
                    }

                    // Sleeps anywhere between 100 and 2000ms to simulate variable
                    // work loads
                    Thread.Sleep(random.Next(100, 2000));
                    App.Counter++;

                    // We don't have to worry about multithreading issues on these
                    // properties because the IntervalTask guarantees there will
                    // only ever be at most one running.
                }
            });

            // Interval is 5 seconds - a real scenario would likely be much longer,
            // like 15 minutes
            task.SetInterval(5000);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: DreamRecorder/ToolBox
        public override void Start(string [] args)
        {
            PerformanceCounterProvider provider = new PerformanceCounterProvider( );

            provider.GetPerformanceCounter("a");

            (string SourceCodeVersion, string Builder, DateTimeOffset ? BuildTime) ? a =
                typeof(ProgramBase <Program, ProgramExitCode, ProgramSetting, ProgramSettingCatalog>).Assembly.
                GetInformationalVersion( );

            Thread thread = new Thread(DoSth);

            thread.Start( );

            Dispatcher = StaticServiceProvider.Provider.GetService <ITaskDispatcher> ( );

            Dispatcher.Start( );

            OnetimeTask task1 = new OnetimeTask(PrintTime1, default);

            Dispatcher.Dispatch(task1);

            IntervalTask task2 = new IntervalTask(
                PrintTime2,
                TimeSpan.FromSeconds(1),
                priority: TaskPriority.Background);

            Dispatcher.Dispatch(task2);
        }
コード例 #3
0
        /// <summary>
        /// 启动任务
        ///
        /// </summary>
        public virtual void Start()
        {
            lock (this)
            {
                if (IsRunning)
                {
                    return;
                }
                IsRunning = true;
            }

            if (_loopInterval >= 0)//LongRunning(轮询任务)
            {
                _mainTaskCancellationToken = new CancellationTokenSource();
                _mainTask = IntervalTask.Start(TimeSpan.FromMilliseconds(_loopInterval),
                                               DoWork, _mainTaskCancellationToken.Token, _stopAfterContinuousIdleLoopCount);
            }
            else//ShortRunning(单次任务)
            {
                _mainTask = new Task <WorkingState>(DoWork);
                _mainTask.Start();
            }

            //到达条件:轮询任务被Stop,轮询任务达到空闲阈值,单次任务执行完毕
            //无论哪种情况,task退出后都将状态置为 IsRunning=false 表示任务结束
            //结束后可以调用Start重新启动任务
            _mainTaskContinueWithTask = _mainTask
                                        .ContinueWith(t =>
            {
                IsRunning = false;
                Helper.Log($"<{this.GetType().Name}> {_mainTask.Id} Stopped.");
            });

            Helper.Log($"<{this.GetType().Name}> {_mainTask.Id} Started.");
        }
コード例 #4
0
ファイル: OpenNumberUtil.cs プロジェクト: qibunext/MVC
 internal static bool UpdateOpenNumbers(this IntervalTask task)
 {
     if (_openNumberIndex >= _openNumberList.Count)
     {
         CreateOpenNumbers(Count);
         return(true);
     }
     return(false);
 }
コード例 #5
0
        public override int Init(object host)
        {
            Logger.LogTrace($"{nameof ( Init )}");

            Current = this;

            UpdateQuota( );

            FileMetadata rootDirectoryMetadata;

            lock ( DataContext )
            {
                rootDirectoryMetadata =
                    DataContext.FileMetadata.SingleOrDefault(
                        metadata
                        => metadata.Name == "\\");
            }

            if (rootDirectoryMetadata == null)
            {
                rootDirectoryMetadata = CreateDirectory(
                    "\\",
                    securityDescriptor : DefaultSecurity.
                    RootSecurity);
            }

            if (host is FileSystemHost fileSystemHost)
            {
                fileSystemHost.SectorSize = 4096;
                fileSystemHost.SectorsPerAllocationUnit    = 1;
                fileSystemHost.MaxComponentLength          = 255;
                fileSystemHost.FileInfoTimeout             = 100000;
                fileSystemHost.CaseSensitiveSearch         = true;
                fileSystemHost.CasePreservedNames          = true;
                fileSystemHost.UnicodeOnDisk               = true;
                fileSystemHost.PersistentAcls              = true;
                fileSystemHost.PostCleanupWhenModifiedOnly = true;
                fileSystemHost.PassQueryDirectoryPattern   = true;
                fileSystemHost.FlushAndPurgeOnCleanup      = true;
                fileSystemHost.VolumeCreationTime          =
                    rootDirectoryMetadata.CreationTime;
                fileSystemHost.VolumeSerialNumber = 0;
                fileSystemHost.FileSystemName     = nameof(CloudFileSystem);
            }

            Logger.LogInformation($"Filesystem Initialized.");

            IntervalTask updateQuotaTask = new IntervalTask(
                UpdateQuota,
                TimeSpan.FromMinutes(2),
                priority: TaskPriority.
                Background);

            IntervalTask flushMetadataTask = new IntervalTask(
                FlushMetadata,
                TimeSpan.FromSeconds(20),
                priority: TaskPriority.Low);

            TaskDispatcher.Dispatch(updateQuotaTask);
            TaskDispatcher.Dispatch(flushMetadataTask);

            return(STATUS_SUCCESS);
        }