예제 #1
0
 public Task gwsAsync()
 {
     cts  = new CancellationTokenSource();
     task = Task.Factory.StartNew(() =>
     {
         while (!cts.IsCancellationRequested)
         {
             try
             {
                 using (IPv4DataContext db = new IPv4DataContext())
                 {
                     var q = db.gws_Old.Select(f => f.Address).Except(db.gws.Select(f => f.Address)).ToList();
                     for (int i = 0; i < q.Count - 1; i++)
                     {
                         if (cts.IsCancellationRequested)
                         {
                             break;
                         }
                         var gws = q[i];
                         //CodeSite.Send("gws.IP", gws.IP);
                         if (ProgressString != null)
                         {
                             ProgressString.Report(string.Format("{0}/{1}", i + 1, q.Count));
                         }
                         var ip = db.IPv4SSL.SingleOrDefault(f => f.Address == gws);
                         if (ip == null)
                         {
                             ip = new IPv4SSL((UInt32)gws);
                         }
                         else if (ip.Isgws)
                         {
                             //CodeSite.SendNote("跳过");
                             continue;
                         }
                         WebCheck(ip);
                         if (ip.RoundtripTime != -1 && db.IPv4SSL.SingleOrDefault(f => f.Address == gws) == null)
                         {
                             db.IPv4SSL.InsertOnSubmit(ip);
                         }
                         if (ip.Isgws)
                         {
                             if (ProgressIP != null)
                             {
                                 ProgressIP.Report(ip);
                             }
                             db.SubmitChanges();
                         }
                     }
                 }
             }
             catch (Exception ex)
             {
                 ex.SendCodeSite("gwsAsync");
                 Thread.Sleep(1000);
             }
         }
     }, cts.Token);
     return(task);
 }
예제 #2
0
 void SaveThreadStart()
 {
     CodeSite.EnterMethod(this, "SaveThreadStart");
     try
     {
         ctsSave  = new CancellationTokenSource();
         taskSave = Task.Factory.StartNew(() =>
         {
             IPv4SSL[] ipa = new IPv4SSL[100];
             int c;
             while (!ctsSave.IsCancellationRequested || !IPStack.IsEmpty)
             {
                 if ((c = IPStack.TryPopRange(ipa)) > 0)
                 {
                     var ip = ipa.Take(c);
                     if (ProgressIP != null)
                     {
                         foreach (var item in ip)
                         {
                             if (item.Isgws)
                             {
                                 ProgressIP.Report(item);
                             }
                         }
                     }
                     while (!SaveDB(ip) && !ctsSave.IsCancellationRequested)
                     {
                         Thread.Sleep(1000);
                     }
                 }
                 if (IPStack.IsEmpty)
                 {
                     Thread.Sleep(1000);
                 }
             }
         }, ctsSave.Token);
     }
     finally
     {
         CodeSite.ExitMethod(this, "SaveThreadStart");
     }
 }