public Task<Maybe<TreeID>> GetRoot() { // Caching Task<T> is much better for performance than caching the result and recreating the Task<T> each time: if (_root == null) _root = getRoot(); return _root; }