|
@@ -24,7 +24,7 @@ namespace FCS.Crawler.Basketball
|
|
|
private static List<B_Team> AllTeamList = new List<B_Team>();
|
|
|
private static List<B_Team> TeamList = new List<B_Team>();
|
|
|
private static List<DataItemDetail> DateItem = new List<DataItemDetail>();
|
|
|
-
|
|
|
+ B_Team g;
|
|
|
public B_TeamJob()
|
|
|
{
|
|
|
log = new LogHelper();
|
|
@@ -40,16 +40,19 @@ namespace FCS.Crawler.Basketball
|
|
|
var ds = services.Query<B_Grouping>("and Remark is not null", "", "distinct EventId,Season,Remark").ToList();
|
|
|
AllTeamList = services.Query<B_Team>().ToList();
|
|
|
//获取分组存取的url ds.Tables[0].Rows.Count
|
|
|
- foreach (var item1 in ds)
|
|
|
+
|
|
|
+ int max = ds.Count;
|
|
|
+ int num = 0;
|
|
|
+ ds.ForEach(async p =>
|
|
|
{
|
|
|
- Task.Run(() =>
|
|
|
+ await Task.Run(() =>
|
|
|
{
|
|
|
List<string> urlList = new List<string>();
|
|
|
- var url = item1.Remark.ToString().Replace("saiAll.do", "1/teamStatistics.do");
|
|
|
+ var url = p.Remark.ToString().Replace("saiAll.do", "1/teamStatistics.do");
|
|
|
urlList.Add(url);
|
|
|
- url = item1.Remark.ToString().Replace("saiAll.do", "2/teamStatistics.do");
|
|
|
+ url = p.Remark.ToString().Replace("saiAll.do", "2/teamStatistics.do");
|
|
|
urlList.Add(url);
|
|
|
- url = item1.Remark.ToString().Replace("saiAll.do", "3/teamStatistics.do");
|
|
|
+ url = p.Remark.ToString().Replace("saiAll.do", "3/teamStatistics.do");
|
|
|
urlList.Add(url);
|
|
|
foreach (var urlItem in urlList)
|
|
|
{
|
|
@@ -65,7 +68,7 @@ namespace FCS.Crawler.Basketball
|
|
|
{
|
|
|
var sjurl = item.Attributes.SingleOrDefault(a => a.Name.Equals("href")).Value;
|
|
|
var teamName = item.InnerText.Trim().Replace("\n", "").Replace("\r", "").Replace("\t", "");
|
|
|
- var eventId = item1.EventId;
|
|
|
+ var eventId = p.EventId;
|
|
|
Task.Run(() =>
|
|
|
{
|
|
|
GetTeamHtml(sjurl, teamName, eventId);
|
|
@@ -76,28 +79,20 @@ namespace FCS.Crawler.Basketball
|
|
|
}
|
|
|
|
|
|
});
|
|
|
- }
|
|
|
- int maxWorkerThreads, workerThreads;
|
|
|
- int maxportThreads, portThreads;
|
|
|
-
|
|
|
- while (true)
|
|
|
+ lock (g)
|
|
|
+ {
|
|
|
+ num++;
|
|
|
+ Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
|
|
|
+ }
|
|
|
+ });
|
|
|
+ lock (g)
|
|
|
{
|
|
|
- /*
|
|
|
- GetAvailableThreads():检索由 GetMaxThreads 返回的线程池线程的最大数目和当前活动数目之间的差值。
|
|
|
- 而GetMaxThreads 检索可以同时处于活动状态的线程池请求的数目。
|
|
|
- 通过最大数目减可用数目就可以得到当前活动线程的数目,如果为零,那就说明没有活动线程,说明所有线程运行完毕。
|
|
|
- */
|
|
|
- ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxportThreads);
|
|
|
- ThreadPool.GetAvailableThreads(out workerThreads, out portThreads);
|
|
|
- Thread.Sleep(1000);
|
|
|
-
|
|
|
- Trace.WriteLine("正在执行任务的线程数" + (maxWorkerThreads - workerThreads));
|
|
|
- if (maxWorkerThreads - workerThreads == 0)
|
|
|
+ while (num < max)
|
|
|
{
|
|
|
- Console.WriteLine("Thread Finished!");
|
|
|
- break;
|
|
|
+ Monitor.Wait(g);//等待
|
|
|
}
|
|
|
}
|
|
|
+ Trace.WriteLine("获取B_Team 完结");
|
|
|
try
|
|
|
{
|
|
|
if (TeamList != null)
|