tasks now return a TaskResult