public void GenerateTasks() { var countOofTaskXShouldBeGenerated = (int)Math.Round(Math.Pow(2, Z)); for (int x = 0; x < countOofTaskXShouldBeGenerated; x++) { var currentX = x; lock (taskOfXes) { Task.Factory.StartNew(() => { var taskOfX = new TaskOfX() { Url = string.Format(UrlTemplate, "", "", currentX.ToString()), X = currentX, Y = Y, Z = Z }; taskOfXes.Add(taskOfX); //Console.WriteLine( taskOfX.Url); //Console.WriteLine($"{taskOfXes.Count} / {countOofTaskXShouldBeGenerated} {taskOfX.Url}"); if (taskOfXes.Count == countOofTaskXShouldBeGenerated) { AllTasksGeneratedEvent?.Invoke(this); } }); } } //throw new NotImplementedException(); }
public void GenerateTasksAndDownload() { var countOofTaskXShouldBeGenerated = (int)Math.Round(Math.Pow(2, Z)); for (int x = 0; x < countOofTaskXShouldBeGenerated; x++) { var currentX = x; lock (taskOfXes) { Task.Factory.StartNew(() => { var taskOfX = new TaskOfX() { Url = string.Format(UrlTemplate, "", "", currentX.ToString()), X = currentX, Y = Y, Z = Z, Filename = Path.Combine(DirPath, $"{currentX}.png") }; taskOfX.Finished += (sender, size) => { if (TasksFininshedIncreasedByEvent != null) { TasksFininshedIncreasedByEvent.Invoke(this, 1, size); } }; if (TasksGeneratedIncreasedByEvent != null) { TasksGeneratedIncreasedByEvent.Invoke(this, 1); } Task.Factory.StartNew(() => { taskOfXes.Add(taskOfX); }); taskOfX.Download(); //Console.WriteLine( taskOfX.Url); //Console.WriteLine($"{taskOfXes.Count} / {countOofTaskXShouldBeGenerated} {taskOfX.Url}"); if (taskOfXes.Count == countOofTaskXShouldBeGenerated) { AllTasksGeneratedEvent?.Invoke(this); } }); } } }
public void GenerateTasks() { var countOofTaskYShouldBeGenerated = (int)Math.Round(Math.Pow(2, Z)); var countOfFullYTask = 0; for (int y = 0; y < countOofTaskYShouldBeGenerated; y++) { var currentY = y; lock (taskOfYs) { Task.Factory.StartNew(() => { var taskofY = new TaskOfY() { UrlTemplate = string.Format(UrlTemplate, "", currentY.ToString(), "{2}"), Y = currentY, Z = Z }; taskofY.AllTasksGeneratedEvent += (sender) => { countOfFullYTask++; if (countOfFullYTask == countOofTaskYShouldBeGenerated) { AllTasksGeneratedEvent?.Invoke(this); } }; taskofY.GenerateTasks(); //Console.WriteLine(taskofY.Y); //Console.WriteLine(taskofY.UrlTemplate); taskOfYs.Add(taskofY); ////该Z层的所有Y均完成创建 //if (taskOfYs.Count == countOofTaskYShouldBeGenerated) //{ // AllTasksGeneratedEvent?.Invoke(this); // //if (this.AllTasksGeneratedEvent != null) // //{ // // //this.AllTasksGeneratedEvent // //} //} }); } } //throw new NotImplementedException(); }