[TOC] # 背景 制作ITask的目的是为了统一插件内部的线程格式,有利于插件重载后内存的回收 # 创建线程 ```csharp ITask.Create((self, token) => { //self为当前的Task Console.WriteLine(self.GetHashCode()); Console.WriteLine("我要创建一个任务"); for (var i = 0; i < 1000; i++) { Console.WriteLine("{0} ==> {1},token.IsCancellationRequested {2}", this.GetHashCode(), i, token.IsCancellationRequested); if (token.IsCancellationRequested) return; Thread.Sleep(1000); //10秒后任务取消 if(i ==10) { token.Cancel(); } } }).Start(); ``` ## ITask.Create ``` Task Create(Action<Task,CancellationTokenSource> action) ``` 允许传递一个带CancellationTokenSource参数的方法 在线程内一定要注意,循环方法内加 `if (token.IsCancellationRequested) return;` 确保线程退出时,可以按照逻辑第一时间退出线程 ## 注意 ~~如果没有增加主动退出的逻辑,知道线程方法运行完毕后才会自动安全结束线程。~~ 插件重载后会自动取消任务,通过token.IsCancellationRequested判断退出