[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判断退出