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); }
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"); } }