2012-01-20 25 views

Trả lời

16

TPL và lớp Task, rất khác với lời hứa của jQuery.

A Task thực sự hiệu quả giống với hành động ban đầu. Nếu bạn muốn có thứ gì đó chạy khi tác vụ hoàn thành, bạn sẽ sử dụng một sự tiếp tục tiếp tục trên Tác vụ. Điều này sẽ tìm kiếm một cách hiệu quả như nhiều:

Task someTask = RunMethodAsync(); 
someTask.ContinueWith(t => 
{ 
    // This runs after the task completes, similar to how promise() would work 
}); 

Nếu bạn muốn tiếp tục trên nhiều nhiệm vụ, bạn có thể sử dụng Task.Factory.ContinueWhenAll hoặc Task.Factory.ContinueWhenAny để làm cho sự tiếp tục hoạt động trên nhiều nhiệm vụ.

5

Điều đó nghe có vẻ như tiếp tục, vì vậy hãy sử dụng .ContinueWith(callback); hoặc trong C# 5.0, chỉ đơn giản là await, tức là

var task = /*...*/ 
var result = await task; 
// everything here happens later on, when it is completed 
// (assuming it isn't already) 

API khác nhau, nhưng tôi nghĩ nó làm những gì bạn đang yêu cầu (một ít khó khăn để chắc chắn ... Tôi không hoàn toàn chắc là tôi hiểu câu hỏi)

5

Nó có vẻ như bạn đang tìm kiếm TaskCompletionSource:

var tcs = new TaskCompletionSource<Args>(); 

var obj = new SomeApi(); 

// will get raised, when the work is done 
obj.Done += (args) => 
{ 
    // this will notify the caller 
    // of the SomeApiWrapper that 
    // the task just completed 
    tcs.SetResult(args); 
} 

// start the work 
obj.Do(); 

return tcs.Task; 

Mã này được lấy từ đây: When should TaskCompletionSource<T> be used?

Các vấn đề liên quan