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));
        }
Exemplo n.º 2
0
 internal Task <IMdNode> CreateNodeAsync()
 => _nodeFactory.CreateNewMdNodeAsync(null);