62,046
社区成员
发帖
与我相关
我的任务
分享
List<ErrorModel> errorList = new List<ErrorModel>();
static ManualResetEvent[] ThreadEvent = new ManualResetEvent[10];//线程事件
public void MakeHtmlByThread(out IList<ErrorModel> Errors, IList<PathModel> pathModels)
{
int count = pathModels.Count / 10;
for (int i = 0; i < 10; i++) //将任务分发给10个支线程
{
ThreadEvent[i] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(delegate { ToHtml(pathModels.Skip(count * i).Take(count).ToList<PathModel>(), ThreadEvent[i]); });
}
WaitHandle.WaitAll(ThreadEvent); //等待所有支线程结束
Errors = errorList;
}
private void ToHtml(IList<PathModel> modelList, ManualResetEvent _theradEvent)
{
foreach (PathModel model in modelList)
{
Stopwatch watch = Stopwatch.StartNew();
try
{
string url = "http://" + Request.UrlReferrer.Authority + Request.ApplicationPath + model.aspxPath;
string html = model.htmlPath;
if (html.EndsWith(".html"))
{
int dot = html.LastIndexOf(".html");
int index = html.LastIndexOf("/") + 1;
string s1 = html.Substring(0, index);
string s2 = html.Substring(index, dot - index);
string fileDir = ZH.FileControl.FileBuild.BuildHtmls(url, Request.PhysicalApplicationPath, s1, s2);
}
}
catch (Exception ex)
{
errorList.Add(new ErrorModel() { errorMsg = Thread.CurrentThread.Name + "号线程执行的任务包含错误:" + ex.Message + ",耗时:" + watch.Elapsed.TotalSeconds + "秒。", id = model.id });
}
}
if (null != _theradEvent) _theradEvent.Set();//指示本线程已结束
}
List<ErrorModel> errorList = new List<ErrorModel>();
Thread[] thrads = new Thread[10];
public void MakeHtmlByThread(out IList<ErrorModel> Errors, IList<PathModel> pathModels)
{
StartThread(pathModels);
foreach (Thread t in thrads) t.Join();
Errors = errorList;
}
private System.Object lockThis = new System.Object();//此对象用于线程安全锁
public void StartThread(IList<PathModel> pathModels)
{
lock (lockThis)
{
int count = pathModels.Count / 10;
for (int i = 0; i < 10; i++) //将任务分发给10个支线程
{
thrads[i] = new Thread(ToHtml);
thrads[i].Start(pathModels.Skip(count * i).Take(count).ToList<PathModel>());
}
}
}
lock(someObject)
{
}