Есть ли интерфейс обещаний для класса Task
, такого как метод отложенного jQuery promise
?
.NET 4.0 Класс задач - интерфейс Promise?
Ответ 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> использовать?