Tôi có một lớp với hai phương thức, Load() và Process(). Tôi muốn có thể chạy các tác vụ nền riêng lẻ này hoặc theo thứ tự. Tôi thích cú pháp ContinueWith(), nhưng tôi không thể làm cho nó hoạt động được. Tôi phải thực hiện một tham số Task trên phương thức tôi tiếp tục và không thể có tham số Task trên phương thức ban đầu.Task.ContinueVới phương thức yêu cầu đối số nhiệm vụ?
Tôi muốn làm điều đó mà không có biểu thức lambda, nhưng tôi bị mắc kẹt hoặc sử dụng chúng, buộc một tham số nhiệm vụ trên một trong các phương pháp, hoặc tạo một phương thức thứ ba LoadAndProcess()?
void Run()
{
// doesn't work, but I'd like to do it
//Task.Factory.StartNew(MethodNoArguments).ContinueWith(MethodNoArguments);
Console.WriteLine("ContinueWith");
Task.Factory.StartNew(MethodNoArguments).ContinueWith(MethodWithTaskArgument).Wait();
Console.WriteLine("Lambda");
Task.Factory.StartNew(() => { MethodNoArguments(); MethodNoArguments(); }).Wait();
Console.WriteLine("ContinueWith Lambda");
Task.Factory.StartNew(MethodNoArguments).ContinueWith(x => {
MethodNoArguments();
}).Wait();
}
void MethodNoArguments()
{
Console.WriteLine("MethodNoArguments()");
}
void MethodWithTaskArgument(Task t = null)
{
Console.WriteLine("MethodWithTaskArgument()");
}
Bạn có thể mô tả lý do tại sao bạn không muốn sử dụng biểu thức lambda? –
Tôi không có lý do thực sự nào ngoài việc tôi thích cú pháp của ContinueWith và nghĩ rằng biểu thức lambda khiến nó trông ít bẩn hơn và khó hiểu hơn. –
'Load' và' Process' có phụ thuộc vào nhau hay không? Dữ liệu được chia sẻ giữa chúng có đồng bộ hóa chủ đề có thể gặp sự cố không? –