Ответ 1
Измерение времени, затрачиваемого на выполнение задачи, требует поддержки от исполнителя задачи. Как вы подразумеваете, вы не можете сделать это только с помощью примитивов задач. Я нажал некоторый образец кода, который я написал некоторое время назад, в котором показана идея.
Усложнение, которое код примера не обрабатывает, состоит в том, что пользователь концептуально думает как о одной задаче (например, компилировать), может быть реализован как несколько задач, и эти тайминги должны быть объединены. Кроме того, задача типа internalDependencyClasspath
"вызывает" другие задачи (flatMap), и поэтому время ее выполнения включает время выполнения "вызываемых" задач.
EDIT: это было реализовано для 0.13.0 в качестве экспериментальной функции в 602c1759a1885 и 1cc2f57e158389759. Интерфейс ExecuteProgress предоставляет достаточную информацию о том, что ранее описанные проблемы не являются проблемой.