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); }
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); }
/// <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."); }
internal static bool UpdateOpenNumbers(this IntervalTask task) { if (_openNumberIndex >= _openNumberList.Count) { CreateOpenNumbers(Count); return(true); } return(false); }
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); }