คือผมอยากรันโค้ดพร้อมๆกัน
เช่น การ list รายชื่อ ไฟล์ในโฟลเดอร์ พร้อมกัน
พอผมใช้ Task
แบบนี้
void Task_Class_1_0()
{
clsCountDown.Srat();
Task t0 = Task.Run(() =>
{
System.IO.Directory.GetDirectories(@"C:\Program Files").ToList<string>

).ForEach(d =>
{
Task t = Task.Run(() =>
{
System.IO.Directory.GetFiles(d,"*.*",System.IO.SearchOption.TopDirectoryOnly).ToList<string>

).ForEach(f =>
{
richTextBox1.WriteLine("AddFile: {0} ", f);
});
});
t.Wait();
richTextBox1.WriteLine("Complete: {0} ", clsCountDown.Final);
});
});t0.Wait();
this.Write("Finished:{0}", clsCountDown.Final);
}
หรือแบบนี้
void Task_Class_1_0_1()
{
clsCountDown.Srat();
Task[] tasks = new Task[100000];
int c = 0;
System.IO.Directory.GetDirectories(@"C:\Program Files").ToList<string>

).ForEach(d =>
{
tasks[c] = Task.Run(() =>
{
System.IO.Directory.GetFiles(d, "*.*", System.IO.SearchOption.TopDirectoryOnly).ToList<string>

).ForEach(f =>
{
richTextBox1.WriteLine("AddFile: {0} ", f);
});
});
c++;
});
int index = Task.WaitAny(tasks);
richTextBox1.WriteLine("Task #{0} completed first.", tasks[index].Id);
richTextBox1.WriteLine("Status of all tasks:");
this.Write("Finished:{0}", clsCountDown.Final);
}
ปรากฎว่ามันรันไปทีละโฟลเดอร์จนกว่าจะครบครับ

จึงอยากสอบถามครับว่า
ถ้าผมจะรัน task พร้อมๆกันจะเขียนยังไง
หรือไม่ถ้าผมจะใช้ Threading หลายๆ thread แต่ให้ให้รู้เวลาที่ทุก thread ทำงาน จบแล้ว ต้องเขียนยังไง ครับ
ประเด็นสำคัญคือ ต้องการ รันงาน ทุกงานไปพร้อมๆกัน ไม่ต้องรอให้เสร็จทีละงาน
แต่ต้องรู้ว่าทุกงานเสร็จตอนไหนครับ
ผมลองใช้ thread มันจะแยก เป็น thread ใคร thread มัน แต่ก็รันพร้อมๆกัน ซึ่งไม่รู้จะดูเวลารวมยังไง ครับ
C# Thread กับ task ทำงานต่างกันยังไงครับ
เช่น การ list รายชื่อ ไฟล์ในโฟลเดอร์ พร้อมกัน
พอผมใช้ Task
แบบนี้
void Task_Class_1_0()
{
clsCountDown.Srat();
Task t0 = Task.Run(() =>
{
System.IO.Directory.GetDirectories(@"C:\Program Files").ToList<string>
{
Task t = Task.Run(() =>
{
System.IO.Directory.GetFiles(d,"*.*",System.IO.SearchOption.TopDirectoryOnly).ToList<string>
{
richTextBox1.WriteLine("AddFile: {0} ", f);
});
});
t.Wait();
richTextBox1.WriteLine("Complete: {0} ", clsCountDown.Final);
});
});t0.Wait();
this.Write("Finished:{0}", clsCountDown.Final);
}
หรือแบบนี้
void Task_Class_1_0_1()
{
clsCountDown.Srat();
Task[] tasks = new Task[100000];
int c = 0;
System.IO.Directory.GetDirectories(@"C:\Program Files").ToList<string>
{
tasks[c] = Task.Run(() =>
{
System.IO.Directory.GetFiles(d, "*.*", System.IO.SearchOption.TopDirectoryOnly).ToList<string>
{
richTextBox1.WriteLine("AddFile: {0} ", f);
});
});
c++;
});
int index = Task.WaitAny(tasks);
richTextBox1.WriteLine("Task #{0} completed first.", tasks[index].Id);
richTextBox1.WriteLine("Status of all tasks:");
this.Write("Finished:{0}", clsCountDown.Final);
}
ปรากฎว่ามันรันไปทีละโฟลเดอร์จนกว่าจะครบครับ
จึงอยากสอบถามครับว่า
ถ้าผมจะรัน task พร้อมๆกันจะเขียนยังไง
หรือไม่ถ้าผมจะใช้ Threading หลายๆ thread แต่ให้ให้รู้เวลาที่ทุก thread ทำงาน จบแล้ว ต้องเขียนยังไง ครับ
ประเด็นสำคัญคือ ต้องการ รันงาน ทุกงานไปพร้อมๆกัน ไม่ต้องรอให้เสร็จทีละงาน
แต่ต้องรู้ว่าทุกงานเสร็จตอนไหนครับ
ผมลองใช้ thread มันจะแยก เป็น thread ใคร thread มัน แต่ก็รันพร้อมๆกัน ซึ่งไม่รู้จะดูเวลารวมยังไง ครับ