2013-09-19 2 views
1

This question приводит меня к еще одному общему (и, возможно, фундаментальному) вопросу: почему объекты Task не могут использоваться повторно?Почему объекты Task не могут использоваться повторно?

Microsoft пишет это заявление без объяснения:

Задача может быть запущена и выполняется только один раз только. Любые попытки запланировать вторую задачу приведут к исключению.

Является ли аргументация столь очевидной, что она не заслуживает объяснений? Нет ли производительности для многократных настроек и запуска Task с продолжением?

+0

«Задача» представляет собой один вызов прошедшего делегата; он не может использоваться повторно, потому что он должен представлять что-то однократно. Делегат, однако, свободен от повторного использования, сколько раз вы хотите, потому что он представляет собой то, что нужно сделать, а не какое-то конкретное исполнение этой вещи. –

+0

Когда мы используем 'Задача' для обертывания' Event', мы сталкиваемся с опасностью неспособности понять одноразовый характер «Задачи»? – rasx

+1

@rasx, что вы подразумеваете под «Задачей», завершающей «Событие»? –

ответ

4

A Task - это представление отдельного того, что может произойти в какой-то момент в будущем. Он предоставляет средства индикации публично, когда задача выполнена, если это делается, каково конечное состояние этой задачи и т. Д.

После того, как задача завершена и вы снова запустите ее, что должно вернуть имущество IsCompleted? Он сделал все, но вы снова начали его. Вы говорите, что вызывающий абонент должен иметь доступ только к окончательному состоянию (то есть, было ли оно отменено, это исключения, это Result и т. Д.) Для окна времени после его запуска и до его завершения? Это было бы очень сложно.

Есть другие объекты, которые там могут представлять собой операцию повторяют, или некоторая совокупность асинхронных операций, таких как (среди других вариантов) IObservable, который эффективно асинхронный последовательности, что может (потенциально) представляют результаты из N вызовов к определенному делегированному, называемому последовательно.

+0

Я думаю, что я узнаю о различии между повторным использованием и восстановлением условий в чтобы запустить один раз один раз. Я также чувствую, что я натыкаюсь на теоретические истоки ReactiveUI: http://www.reactiveui.net/ ... когда мы говорим, что что-то предназначено для запуска * один раз * импликация может быть раз на все время --- но на самом деле это может быть один раз в пределах временного фрагмента определенного жизненного цикла домена. – rasx

Смежные вопросы