Task Self moniter

public class Program
    {
        readonly static object lockobj = new object();
        static void Main(string[] args)
        {
            log4net.Config.XmlConfigurator.Configure();


            int c = 0;
            var makeIds = new List<int>();
            using (var db = new food_data_prod_imageQualityEntities())
            {
                makeIds = db.Make.Where(m => m.IsHide == false && m.UserId != -1).Select(m => m.Id).ToList();
            }
            var allC = makeIds.Count();


            var task = new Task(() =>
              {
                  while (c < allC)
                  {
                      Console.WriteLine("Left:" + (allC - c));
                      Task.Delay(1000).Wait();
                  }
              }, TaskCreationOptions.LongRunning);


            task.Start();





            foreach (var id in makeIds)
            {
                using (var db = new food_data_prod_imageQualityEntities())
                {
                    var make = db.Make.First(m => m.Id == id);


                    var imageUrl = make.ImageUrl;




                    var hideFlag = CheckQualityToHide(GetImageInfo, imageUrl, id).Result;


                    make.IsHideByImageQuality = hideFlag;


                    db.SaveChanges();
                    lock (lockobj)
                    {
                        c = c + 1;
                    }
                }


            }
        }




        public static async Task<bool?> CheckQualityToHide(Func<string, Tuple<int, int, int>> getImageInfo, string imageUrl, int id)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("logger-name");


            try
            {
                var imageInfo = getImageInfo(imageUrl);


                if (imageInfo.Item1 > 1 && imageInfo.Item2 > 1 && imageInfo.Item3 > 10)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            catch (Exception ex)
            {
                log.Error("Id:" + id + ",Ex:" + ex);
                return null;
            }
        }


        public static Tuple<int, int, int> GetImageInfo(string imageUrl)
        {
            using (var client = new WebClient())
            {
                var dataResult = client.OpenRead(imageUrl);
                Image pic = Image.FromStream(dataResult);


                var width = pic.Width;
                var height = pic.Height;
                return new Tuple<int, int, int>(width, height, width * height);
            }


        }
    }

你可能感兴趣的:(Task Self moniter)