public async Task Delete(StoreLocation location, UpdateAuditInfo audit, SecureStoreOptions options = SecureStoreOptions.All) { var metadata = await _store.GetMetadata(location); if (metadata == null) { return; } if (options.HasFlag(SecureStoreOptions.KeepDeletes)) { await _store.SoftDelete(location, audit); } else { await _store.PermanentDelete(location); } // The rest of the tasks are done asyncly var tasks = new List <Task>(); if (options.HasFlag(SecureStoreOptions.Backup)) { if (_backupQueue == null) { throw new ArgumentException("Backup option should not be used if no backup queue has been defined", "options"); } tasks.Add(_backupQueue.SendMessage(GetMessageDetails(location, metadata))); } if (options.HasFlag(SecureStoreOptions.Index)) { if (_indexQueue == null) { throw new ArgumentException("Index option should not be used if no index queue has been defined", "options"); } tasks.Add(_indexQueue.SendMessage(GetMessageDetails(location, metadata))); } if (tasks.Count > 0) { await Task.WhenAll(tasks); } }