รายละเอียดของการตอบ ::
โค้ดนี้ ตอนนี้ทำได้แล้วครับ
แล้วก็แก้เละไปแล้วครับแต่ก็ยังพอใช้ได้อยู่
Code (C#)
public partial class frmTask_3 : Form
{
public frmTask_3()
{
InitializeComponent();
}
private async void frmTask_3_Load(object sender, EventArgs e)
{
Task[] writeFileTasks = new Task[20];
await Task.Run(() =>
{
int i = 0;
const int sleepBetweenLeech = 100;
for (; i < writeFileTasks.Length; ++i)
{
Thread.Sleep(sleepBetweenLeech);
var iCaptureByValue = i;
writeFileTasks[i] = Task.Run(() =>
{
richTextBox1.WriteLine( "Task " + iCaptureByValue + ":" + TestRunTask(iCaptureByValue).Result + " Finish" );
});
}
});
await Task.WhenAll(writeFileTasks);
richTextBox1.WriteLine("Task All Finish");
}
async void AsyncLeech()
{
const int sleepBetweenLeech = 100;
Task[] writeFileTasks = new Task[20];
int taskCount = 0;
var taskCountOuterCapture = taskCount++;
for (int i = 0; i < writeFileTasks.Length; i++)
{
Thread.Sleep(sleepBetweenLeech);
try
{
writeFileTasks[i] = Task.Run(() => { richTextBox1.WriteLine("Task " + i + ":" + TestRunTask(i).Result + " Finish"); });
}
finally { }
}
await Task.WhenAll(writeFileTasks);
richTextBox1.WriteLine("Task All Finish");
}
async Task<int> TestRunTask(int input)
{
int sl = new Random().Next(20, 500);
return await Task.Run(() =>
{
int count = 0;
for (int i = 0; i < new Random().Next(5, 500); i++)
{
System.Threading.Thread.Sleep(sl);
count++;
}
// richTextBox1.WriteLine(" MethodRandom " + input + ":Finish");
return count;
});
}
}
มันก็ไม่เชิงลืม นะครับ
เหมือนว่า มันเป็นเรื่องใหม่สำหรับผม
ที่แน่ๆ คือ ความรู้ และ ทักษะในการประยุค เรื่องนี้ผมยังน้อยมาก
ผมเขียนโค้ดตาม ตัวอย่างเยอะมาก ครับ พอมันปรับเปลี่ยน ก็กลายเป็นไม่ตรงตามต้องการครับ
แต่ของมันต้องศึกษา ผมก็ต้องอยู่กับมันต่อไป จนกว่าจะเป็นไปข้างหนึ่งนี้แหละครับ(5555)