public async Task <IStreamCollection> GetOrAddCollectionAsync(IValueAD dataDbRoot) { IMdNode typeStoreHead; var typeStoreResult = await dataDbRoot.GetValueAsync().ConfigureAwait(false); if (!typeStoreResult.HasValue) { typeStoreHead = await _nodeFactory.CreateNewMdNodeAsync(null) .ConfigureAwait(false); await dataDbRoot.SetAsync(new StoredValue(typeStoreHead.MdLocator)) .ConfigureAwait(false); } else { var typeStoreHeadLocation = typeStoreResult.Value.Parse <MdLocator>(); typeStoreHead = (await _nodeFactory.LocateAsync(typeStoreHeadLocation) .ConfigureAwait(false)).Value; } Task OnHeadChange(MdLocator newLocation) => dataDbRoot.SetAsync(new StoredValue(newLocation)); var dataRoot = new DataTree(typeStoreHead, OnHeadChange); return(new StreamCollection(dataRoot, _dataTreeFactory)); }
internal Task <IMdNode> CreateNodeAsync() => _nodeFactory.CreateNewMdNodeAsync(null);