在C#中经常用到Thread来执行多线程任务,用BackgroundWorker也非常方便。今天提到的是用任务工厂(TaskFactory)来实现多线程。
//创建任务列表
List<Task> tasks = new List<Task>();
//将任务添加至任务工厂
for (int i = 0; i < 3;i++ )
{
tasks.Add(Task.Factory.StartNew(()=>RunTask()));
}
//由任务工厂执行任务
Task.Factory.ContinueWhenAll(tasks.ToArray(),TasksFinish,CancellationToken.None);
//创建任务工厂控制变量
private CancellationTokenSource _cts = new CancellationTokenSource();
//task主函数
private void RunTask()
{
while(true)
{
//如果任务取消,退出任务
if(_cts.IsCancellationRequested)
{
break;
}
//do some thing
}
}
//任务结束函数,任务结束或取消后都会进这个函数
private void TasksFinish()
{
MessageBox.Show("任务结束!");
}
//取消任务
private void StopTasks()
{
_cts.Cancel();
}