Thread.Join()的好处主要体现在对顺序流的控制,当一个操作流涉及到很多步骤并且要求严格的先后顺序,这个时候Thread.Join()起到了用场。
首先,简单的介绍Thread.Join()的定义:指在一线程里面调用另一线程join方法时,表示将本线程阻塞直至另一线程终止时再执行.这里对于定义不做过多的解释,直接看在具体项目中的使用。
简单的说一下我在项目使用的场景:后台系统有一个在线生成exe的功能,exe需要一些固定的js、css等文件,所以第一步是对文件进行复制,然后进行md5的计算生成下载xml文件供客户端下载,最后压缩所有的文件。
这个功能的实现我们使用了Thread.Join()。
///
/// 生成exe第一个线程,主要用来复制必要的文件
///
///
public void CopyFiles(object quePlanId)
{
RecordLog.writeFile(LogTypeEnum.Xml, "线程生成exe,第一步生成exe模板以及必要文件开始:--'" + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "'");
DateTime begin = DateTime.Now;
//......................................................................具体实现方法
}
///
/// 计算md5值得线程,在这里使用线程调用CopyFiles()方法,在复制文件结束之后才可以执行本方法
///
///
public void StartWork(object quePlanId)
{
//复制必要文件
//启动线程使用带参数的委托
System.Threading.Thread copyFiles = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(CopyFiles));
copyFiles.Name = "复制文件";
copyFiles.Start(quePlanId);
copyFiles.Join();
RecordLog.writeFile(LogTypeEnum.Xml, "复制文件线程结束--'" + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "'");
RecordLog.writeFile(LogTypeEnum.Xml, "开始执行计算md5值线程--'" + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "'");
DateTime begin = DateTime.Now;
RecordLog.writeFile(LogTypeEnum.Xml, "生成exe第三步计算所有下载文件的MD5值开始:--'" + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "'");
//。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
public ActionResult ThreadGenerate()
{
////启动线程使用带参数的委托
System.Threading.Thread x = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(StartWork));
x.Name = "StartWork";
x.Start(339);
return View();
}