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); } }