2012-01-20 12 views

Odpowiedz

16

OC i klasa Zadanie są bardzo różne od obietnicy jQuery.

A Task jest faktycznie bardziej przypomina oryginalną akcję. Jeśli chcesz, aby coś działało, gdy zadanie zostało zakończone, użyjesz kontynuacji w zadaniu. To faktycznie wygląda bardziej jak:

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

Jeśli chcesz kontynuować na wielu zadań, można użyć Task.Factory.ContinueWhenAll lub Task.Factory.ContinueWhenAny zrobić kontynuacje, który działa na wielu zadań.

5

To brzmi jak kontynuacja, więc użyj .ContinueWith(callback); lub w C# 5.0, po prostu await, tj

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

inny API, ale myślę robi to co prosicie (trochę ciężko, aby upewnić się ... Nie jestem całkowicie pewien Rozumiem pytanie)

5

Wydaje się, że szukasz 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; 

Kod pochodzi stąd: When should TaskCompletionSource<T> be used?