using System.Collections.Generic;
using System.Threading.Tasks;
using System.Diagnostics;
public class TraingulateModel
public int PolygonId { get; set; }
public List<Point3D> Points3D { get; set; }
public TraingulateModel()
Points3D = new List<Point3D>();
public decimal X { get; set; }
public decimal Y { get; set; }
public decimal X { get; set; }
public decimal Y { get; set; }
public decimal Z { get; set; }
public int ID { get; set; }
public List<Point> Points { get; set; }
public List<Point3D> Points3D { get; set; }
private static List<Polygon> GetPolygons()
var polygons = new List<Polygon>();
polygons.Add(new Polygon()
Points = new List<Point> { new Point() { X = 10, Y = 15 }, new Point() { X = 20, Y = 15 }, new Point() { X = 30, Y = 15 } },
polygons.Add(new Polygon()
Points = new List<Point> { new Point() { X = 10, Y = 15 }, new Point() { X = 20, Y = 15 }, new Point() { X = 30, Y = 15 } },
polygons.Add(new Polygon()
Points = new List<Point> { new Point() { X = 10, Y = 15 }, new Point() { X = 20, Y = 15 }, new Point() { X = 30, Y = 15 } },
private static void RunTriangulation(List<Polygon> polygons)
foreach (var polygon in polygons)
var triangulateModel = Triangulate(polygon);
SavePolygonTraingulations(triangulateModel);
private static async Task RunTriangulationAsyc(List<Polygon> polygons)
foreach (var polygon in polygons)
var triangulateModel = await Task.Run(() => Triangulate(polygon));
SavePolygonTraingulations(triangulateModel);
private static async Task RunTriangulationParallelAsyc(List<Polygon> polygons)
List<Task<TraingulateModel>> model = new List<Task<TraingulateModel>>();
foreach (var polygon in polygons)
model.Add(Task.Run(() => Triangulate(polygon)));
var result = await Task.WhenAll(model);
foreach (var item in result)
SavePolygonTraingulations(item);
private static TraingulateModel Triangulate(Polygon polygon)
var triangulateModel = new TraingulateModel();
triangulateModel.PolygonId = polygon.ID;
private static void SavePolygonTraingulations(TraingulateModel triangulateModel)
Console.WriteLine(" polygon {0} is saved", triangulateModel.PolygonId);
private static async void RunTask()
var watch = new Stopwatch();
var polygons = GetPolygons();
await RunTriangulationParallelAsyc(polygons);
Console.WriteLine("Total Time Taken = {0}",watch.ElapsedMilliseconds);
public static void Main()
Console.WriteLine("Main Thread End");