Я использую библиотеку параллельных задач в своем приложении. У меня есть задача (назовем это «DoSomething»), которая может быть отменена. Независимо от того, была ли задача выполнена успешно, отменена или успешно завершена, к этой задаче прикреплено продолжение, которое выполняет некоторую очистку.
В коде, который запускает эту задачу, я хочу вернуть объект задачи, состояние которого (сбой, отменено, выполнено до завершения) отражает состояние задачи DoSomething, однако важно, чтобы возвращаемая мной задача не отображала этот статус до задача продолжения выполняется.
Вот пример:
public Task Start(CancellationToken token)
{
var doSomethingTask = Task.Factory.StartNew(DoSomething
, token);
var continuationTask = doSomethingTask.ContinueWith
(
(antecedent) =>
{
if (antecedent.IsFaulted || antecedent.IsCanceled)
{
//Do failure-specific cleanup
}
//Do general cleanup without regard to failure or success
}
);
//TODO: How do I return a Task obj which Status reflect the status of doSomethingTask,
//but will not transition to that status until continuationTask completes?
}
Я мог бы использовать TaskCompletionSource, но это кажется глупым. Любые другие идеи?