Подтвердить что ты не робот

.NET 4.0 Класс задач - интерфейс Promise?

Есть ли интерфейс обещаний для класса Task, такого как метод отложенного jQuery promise?

4b9b3361

Ответ 1

TPL и класс Task сильно отличаются от jQuery.

A Task фактически фактически больше похож на оригинальное действие. Если вы хотите, чтобы что-то выполнялось, когда задача завершена, вы должны использовать продолжение в Задаче. Это будет выглядеть по-другому:

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

Если вы хотите продолжить выполнение нескольких задач, вы можете использовать Task.Factory. ContinueWhenAll или Task.Factory. ContinueWhenAny, чтобы выполнять продолжения, которые работают с несколькими задачами.

Ответ 2

Это звучит как продолжение, поэтому используйте .ContinueWith(callback); или в С# 5.0, просто await, т.е.

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

разные API, но я думаю, что он делает то, что вы просите (немного трудно быть уверенным... я не совсем уверен, что понимаю вопрос)

Ответ 3

Кажется, что вы ищете 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;

Код взят отсюда: Когда должен TaskCompletionSource <T> использовать?