原始线:Thread
用法: Thread thread=new Thread(new ThreadStart(执行方法));
thread.Priority = ThreadPriority.BelowNormal;
thread.start();
或者:
Thread thread= new Thread(new ParameterizedThreadStart(执行方法)) ;
thread.Priority = ThreadPriority.BelowNormal;
thread.start();
讲解:Priority设置线程的优先级,start开启线程。ThreadStart不带参数的方法,ParameterizedThreadStart带一object参数的方法。
此种方法不推荐使用,创建多线的时候如果手动.Abort()的话,如果此线程正在执行状态中,强制关闭则会抛出异常。还用可能会把主线程也给卡死。
进阶线程:Task
Task task=new Task.Factory.StartNew(()=>{
要执行的方法
});
task.Result;
讲解:Task和thread本身没有多大区别,无非就是语法的不同摆了,Task的方式也就是相当于创建了一个新的线程,task.Result等待这个线程执行完返回的结果。
高手进阶篇:委托的异步线程
private delegate void FlushClient(参数1,参数2,参数3);
FlushClient flush=new FlushClient(要执行的方法参数与委托参数相同);
flush.BeginInvoke(参数1,参数2,参数3,执行的回调函数,object);
实例:
private delegate void FlushClient(Action action,int timers);//代理
public bool duge = false;
public void ExecutiveThreedStart(Action action, int timers)
{
FlushClient fc = new FlushClient(ThreadFunction);
// threed = new Thread();
fc.BeginInvoke(action,timers, null, null);
}
private void ThreadFunction(Action action, int timers)
{
while (duge)
{
action();
Thread.Sleep(timers * 1000);
}
}
讲解:BeginInvoke表示的是异步执行这个委托。
三种方式其实都是异步线程,何为异步线程就是在程序的主线程之外在创建一个子线程执行,线程之间执行相互不想干,主线程并不需要要等待子线程的执行,就是相当于跑步比赛一样,各个赛道中的人同时进行奔跑。多线程概念之中还有一个同步线程,其实就是将多个线程包装成一个模块,依次执行,就相当于有很多条赛道,第一条赛道中的人跑完,第二条赛道中的人继续奔跑,依次执行。本人还没有还没有用过同步线程,一开始觉得为何要有同步线程这个东西呢?为何不用单线程呢?其实任何一件产品被人广泛的使用都有它一定的道理,后来经过大脑一思考,终于被我想到了。如果我们创建了过多的异步线程是不是会造成服务器的开销很大呢?创建的线程大于了服务器的开销,反而会导致线程的之间的切换过于的平凡,反而会降低程序运行的效率,有可能还会导致出现异常,这样的话使用多线程是不是没有意义了呢?这个之后我们是不是可以采用同步线程来管理异步线程呢?当然以上只是我个人的观点,并没有经过实际的验证。