cpu รุ่นใหม่ๆ สามารถทำงานได้พร้อมๆ กันหลายๆ งานในเวลาเดียวกัน ทำไมจะไม่เขียนโปรแกรมให้ทำงานพร้อมๆ กันจะได้เสร็จไว้ๆ ละ
ตัวอย่าง c# Console App
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; namespace ConsoleApp1 { internal class Program { private static void Main(string[] args) { Dictionary<string, string> months = new Dictionary<string, string>() { {"01","January"}, {"02","February"}, {"03","March"}, {"04","April"}, {"05","May"}, {"06","June"}, {"07","July"}, {"08","August"}, {"09","September"}, {"10","October"}, {"11","November"}, {"12","December"}, }; var reultsts = new List<List<string>>(); Console.WriteLine("Start Main"); reultsts = RunAsync(months).Result; Console.WriteLine("End Main get reultsts " + reultsts.Count() + " items"); Console.ReadKey(); } public static async Task<List<List<string>>> RunAsync(Dictionary<string, string> months) { var tasks = new List<Task>(); var reultsts = new List<List<string>>(); Console.WriteLine("Start RunAsync"); foreach (KeyValuePair<string, string> item in months) { tasks.Add(Task.Run(() => { reultsts.Add(TaskRun(item.Key, item.Value).Result); })); } Task t = Task.WhenAll(tasks); try { t.Wait(); } catch { } Console.WriteLine("End RunAsync"); return reultsts; } public static async Task<List<string>> TaskRun(string key, string value) { Random random = new Random(); string message; int sleep; var results = new List<string>(); for (int i = 0; i < 2; i++) { sleep = random.Next(1, 10) * 1000; System.Threading.Thread.Sleep(sleep); message = "TaskRun month " + key + " " + i + " " + sleep; results.Add(message); Console.WriteLine("\t" + message); } return results; } } }
จะเห็นว่าไม่ได้ทำงานตามลำดับเดือน แถมบางเดือนจะทำครั้งที่ 1 และครั้งที่ 2 ห่างกันมากด้วยซ้ำไปเพราะว่าการจำลองการทำงานด้วย sleep ที่สุ่มไว้ได้เวลาต่างกันมาก อันไหนทำเสร็จแล้วมันก็จะไปหยิบงานอื่นมาทำก่อนโดยไม่ต้องรอให้งานเสร็จตามลำดับ
About the author