2 コミット 6e9f9b46c7 ... 84cb08a647

作者 SHA1 メッセージ 日付
  lyl 84cb08a647 Merge branch 'master' of http://39.108.190.163:3000/zx66/FCS 6 年 前
  lyl 00da5eb93f 3 6 年 前

+ 1 - 1
FCS.Crawler/Content/Jobs/BasketJobs/Basketball/B_MakeBallRankingJob.cs

@@ -65,7 +65,7 @@ namespace FCS.Crawler.Basketball
         /// <param name="sqlstring"></param>
         private void GetSqlString(string Year)
         {
-            TeamList = services.Query<B_Team>().ToList();
+            TeamList = services.Query<B_Team>().ToList(); 
             var dataItem = services.GetDataItem(DataItemDetailEnum.FootBallMakeBallType);
             var ds = services.Query<B_Grouping>("and Remark is not null", "", "distinct EventId,Season,Remark").ToList();
             if (Year != "")

+ 20 - 26
FCS.Crawler/Content/Jobs/BasketJobs/Basketball/B_PlayerJob.cs

@@ -26,6 +26,7 @@ namespace FCS.Crawler.Basketball
     {
         public List<B_Players> players = new List<B_Players>();//球员列表
         public List<B_Players> allplayers = new List<B_Players>();//球员列表
+        B_Players g;
         public B_PlayerJob()
         {
             log = new LogHelper();
@@ -42,40 +43,33 @@ namespace FCS.Crawler.Basketball
         {
             var ds = services.Query<B_Team>("and Remark is not null").ToList(); ;
             allplayers = services.Query<B_Players>().ToList();
-
+            int max = ds.Count;
+            int num = 0;
             //获取赛事存取的url  ds.Tables[0].Rows.Count
-            foreach (var item in ds)
+            ds.ForEach(async p =>
             {
                 //异步加载分组
-                var url = item.Remark.ToString();
-                var TeamId = item.Id.ToString();
-                var TeamName = item.Name.ToString();
-                Task.Run(() =>
+                var url = p.Remark.ToString();
+                var TeamId = p.Id.ToString();
+                var TeamName = p.Name.ToString();
+                await Task.Run(() =>
+                 {
+                     GetPlayerListHtml(url, TeamId, TeamName);
+                 });
+                lock (g)
                 {
-                    GetPlayerListHtml(url, TeamId, TeamName);
-                });
-            }
-
-            int maxWorkerThreads, workerThreads;
-            int maxportThreads, portThreads;
-            while (true)
+                    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_Players 完结");
 
             try
             {

+ 20 - 25
FCS.Crawler/Content/Jobs/BasketJobs/Basketball/B_TeamJob.cs

@@ -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)