标签:str 一个 执行 .net actor images this 委托 syn
今天我们继续接着线程讲讲,上一章提到一下task概念,
首先接着task继续往下讲,在前章节提到过Thread怎么实现其他线程完成后再让主线程继续执行的功能,那么如果Task也需要线程等待事件,该怎么实现呢?
在这里介绍四种方法。
1、ContinueWhenAny方法
taskFactory.ContinueWhenAny(taskList.ToArray(), t =>
{
//t.AsyncState
Console.WriteLine("这里是ContinueWhenAny {0}", Thread.CurrentThread.ManagedThreadId);
});
这种做法是在等task对象list集合中的任何一个线程完成后执行回调函数。

2、ContinueWhenAll方法
taskFactory.ContinueWhenAll(taskList.ToArray(), tList =>
{
Console.WriteLine("这里是ContinueWhenAll {0}", Thread.CurrentThread.ManagedThreadId);
});
这种是等list集合全部完成后在执行,在执行回调函数

3、WaitAny方法
Task.WaitAny(taskList.ToArray());//执行的线程等待某一个task的完成
Console.WriteLine("after WaitAny{0}", Thread.CurrentThread.ManagedThreadId);

只要等待其中任何一个线程完成,就会继续后面的程序代码。
4、WaitAll方法
Task.WaitAll(taskList.ToArray());//执行的线程等待全部的task的完成
Console.WriteLine("after WaitAll{0}", Thread.CurrentThread.ManagedThreadId);

等待多有线程完成后再去执行后面程序代码。
一般来说有这四种方法,可以解决等待事件的所有需求,如果不能实现,那有可能是程序设计上有些问题了。
***********************************************************************************************************************************************
Parallel:这个是.net后面提出的概念
Parallel.Invoke(() => this.TestThread("btnParallel_Click_0")
, () => this.TestThread("btnParallel_Click_1")
, () => this.TestThread("btnParallel_Click_2")
, () => this.TestThread("btnParallel_Click_3")
, () => this.TestThread("btnParallel_Click_4"));
//等于使用4个task,然后主线程同步invoke一个委托 然后主线程waitall

这种做法就是让主线程也参与在计算中,充分利用资源吧。
Parallel.For(6, 10, t =>
{
string name = string.Format("For btnParallel_Click_{0}", t);
this.TestThread(name);
});
Parallel.ForEach(new int[] { 5, 6, 7, 10, 8473847 }, t =>
{
string name = string.Format("ForEach btnParallel_Click_{0}", t);
this.TestThread(name);
});
ParallelOptions parallelOptions = new ParallelOptions()
{
MaxDegreeOfParallelism = 5//相当于设置一个最大的线程数
};
Parallel.For(6, 15, (t, state) =>
{
string name = string.Format("btnParallel_Click_{0}", t);
this.TestThread(name);
Console.WriteLine(state);
state.Break();//退出单次循环
state.Stop();//退出全部的循环
return;
});
标签:str 一个 执行 .net actor images this 委托 syn
原文地址:http://www.cnblogs.com/xima/p/7282683.html