private async void OnNonTerminalDataAvailableEvent(object sender, NonTerminalDataAvailableEventArgs <TData> e) { var semaphore = await _semaphore.WaitAsync(e.Descriptor); try { await DataPool.SaveAsync(e.Descriptor, e.RetrievalContext, semaphore.Release); } finally { semaphore.Release(); } }
public virtual async Task Acquire(ITerminalDescriptor descriptor) { var semaphore = await _semaphore.WaitAsync(descriptor); try { if (DataPool.Contains(descriptor) == false) { await DataPool.SaveAsync(descriptor, await DataRetriever.RetrieveAsync(descriptor), semaphore.Release); } } finally { semaphore.Release(); } }
public virtual void FillCollectionWithData(ICollection <TData> collection, INonTerminalDescriptor descriptor) { ClearCollection(collection); AppendToCollection(DataPool.Retrieve(descriptor), collection); }
public virtual async Task <IEnumerable <TData> > RetrieveAsync(INonTerminalDescriptor descriptor) { await Acquire(descriptor); return(DataPool.Retrieve(descriptor)); }
public virtual async Task <TData> RetrieveAsync(ITerminalDescriptor descriptor) { await Acquire(descriptor); return(DataPool.Retrieve(descriptor)); }