Beispiel #1
0
        public async Task WriteAsync(IEnumerable <ISerie <TKey, TEntry> > items, PublicationType publicationType, Publish publish, bool useTemporaryStorageOnFailure)
        {
            // ensure we only iterate the original collection once, if it is not a list or array
            if (!(items is ICollection <ISerie <TKey, TEntry> > || items is Array))
            {
                items = items.ToList();
            }

            var tasks = new List <Task <IEnumerable <ISerie <TKey, TEntry> > > >();

            tasks.AddRange(LookupStorages(items).Select(c => WriteToStorageAsync(c.Storage, c.Lookups, useTemporaryStorageOnFailure)));
            await Task.WhenAll(tasks).ConfigureAwait(false);

            // Only publish things that were written
            var writtenItems = tasks.SelectMany(x => x.Result);

            if (publish.HasFlag(Publish.Remotely))
            {
                if (_remotePublishSubscribe == null)
                {
                    throw new MissingTsdbServiceException("No remote publish subscribe store has been provided for the TsdbClient.");
                }

                await _remotePublishSubscribe.PublishAsync(writtenItems, publicationType).ConfigureAwait(false);
            }
            if (publish.HasFlag(Publish.Locally))
            {
                await _localPublishSubscribe.PublishAsync(writtenItems, publicationType).ConfigureAwait(false);
            }
        }