Task初步学习和应用

Task - 多线程 基于TreedPool

什么时候用多线程呢?

任务能够并发运行,使用后可以提升速度,优化体验

创建形式:

1、Task.Run(()=>this.方法名(参数字));

2、TaskFactory taskFactory = Task.Factory;

taskFactory.StartNew(()=>this.方法名(参数));

3、new Task(()=>this.方法名(参数)).Start();

 

方法:

Task.WaitAny(Task.ToArray(),最大等待时间)

阻塞当前线程,等某个线程的任务完成后,才执行后面的操作。-卡界面

Task.WaitAll(Task.ToArray(),最大等待时间)

阻塞当前线程,等放入的全部线程都完成后,才执行后面的操作。-卡界面

注:阻塞线程可以判断,判断是哪个线程,卡主线程会卡界面,但是我们可以卡子线程啊

 

Task.WhenAll(Task.ToArray()).ContinueWith( 方法);

启动线程,当全部线程完成后就调用ContinueWith中的方法。-不卡界面

Task.WhenAny(Task.ToArray()).ContinueWith(方法);

启动线程,当某个线程完成后就调用ContinueWith中的方法。-不卡界面

 

Task.Delay(1000).continueWith(方法);

创建将在延迟时间后进行的操作方法。 - 不会卡线程

 

问题

怎么查看该线程是由谁完成的呢?

利用TaskFactory,初始化的时候,设置的第二个参数为你的标识,查看使用

AsyncState

 

限制线程数不超过11 代码:

List<Task> taskList = new List<Task>();

foreach(var i in list){

int k = i;

taskList.Add(Task.Run(()=>action.Invoke(k)));

if(taskList.Count>10)

{

Task.WaitAny(taskList.ToArray());

taskList = taskList.Where(t=>t.Startus != TaskStatus.RanToCompletion).ToList();

}

}

Task.WhenAll(taskList.ToArray());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值