public Mandelbrot_Julia(Mandelbrot_Julia mj) { IPos = mj.IPos; JPos = mj.JPos; XPos = mj.XPos; YPos = mj.YPos; Radius = mj.Radius; Repert = mj.Repert; Resolution = mj.Resolution; Data = mj.Data; }
//http://qwerty2501.hatenablog.com/entry/2014/04/24/235849 async/await ~非同期なライブラリは楽じゃない~ //http://mcommit.hatenadiary.com/entry/2016/07/22/014657 C# Task async, await の使い方 //http://ufcpp.net/study/csharp/misc_task.html [雑記] スレッド プールとタスク //http://outside6.wp.xdomain.jp/2016/08/06/post-343/ Task.Waitはスレッドをロックする Task.Waitの問題点 //http://outside6.wp.xdomain.jp/2016/08/09/post-568/ TaskとawaitのデッドロックをTaskで回避する //http://qiita.com/acple@github/items/8f63aacb13de9954c5da Taskを極めろ!async/await完全攻略 public static Task <short[]> JuliaMap(double xpos, double ypos, double radius, short repert, int resolution, int split) { return(Task.Run <short[]>(() => { int size = resolution / split; resolution = size * split; short[] data = new short[resolution * resolution]; double julia = radius * 2 / (split - 1); List <Task <short[]> > tasks = new List <Task <short[]> >(); for (int j = 0; j < split; ++j) { for (int i = 0; i < split; ++i) { tasks.Add(Mandelbrot_Julia.Julia(-radius + julia * i, radius - julia * j, 0, 0, 2, repert, size)); } } Task.WaitAll(tasks.ToArray()); for (int j = 0; j < split; ++j) { for (int i = 0; i < split; ++i) { for (int y = 0; y < size; ++y) { for (int x = 0; x < size; ++x) { data[j * size * resolution + i * size + y * resolution + x] = tasks[j * split + i].Result[y * size + x]; } } } } return data; })); }