Vì vậy, gần đây tôi đã được cho biết rằng cách tôi sử dụng .ContinueWith for Tasks không phải là cách thích hợp để sử dụng chúng. Tôi vẫn chưa tìm thấy bằng chứng về điều này trên internet nên tôi sẽ hỏi các bạn và xem câu trả lời là gì. Đây là một ví dụ về cách tôi sử dụng .ContinueWith:
public Task DoSomething()
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("Step 1");
})
.ContinueWith((prevTask) =>
{
Console.WriteLine("Step 2");
})
.ContinueWith((prevTask) =>
{
Console.WriteLine("Step 3");
});
}
Bây giờ tôi biết đây là một ví dụ đơn giản và nó sẽ chạy rất nhanh, nhưng chỉ cần giả sử mỗi tác vụ thực hiện một số hoạt động lâu hơn. Vì vậy, những gì tôi đã được nói là trong .ContinueWith, bạn cần phải nói presTask.Wait (); nếu không, bạn có thể làm việc trước khi tác vụ trước đó kết thúc. Điều đó thậm chí có thể? Tôi đã giả định rằng nhiệm vụ thứ hai và thứ ba của mình sẽ chỉ chạy khi nhiệm vụ trước đó của chúng kết thúc.
Những gì tôi đã được cho biết cách viết mã:
public Task DoSomething()
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("Step 1");
})
.ContinueWith((prevTask) =>
{
prevTask.Wait();
Console.WriteLine("Step 2");
})
.ContinueWith((prevTask) =>
{
prevTask.Wait();
Console.WriteLine("Step 3");
});
}