/// <summary>
        /// Creates a filter which includes all the tracks in the list.
        /// </summary>
        /// <param name="assetName">The asset name.</param>
        /// <param name="filterName">The desired filter name.</param>
        /// <param name="tracksToKeep">The list of tracks to keep.</param>
        private async Task CreateTrackFilterAsync(string assetName, string filterName, List <TrackInfo> tracksToKeep)
        {
            List <FilterTrackSelection> includedTracks = new List <FilterTrackSelection>();

            foreach (TrackInfo track in tracksToKeep)
            {
                var conditions = new List <FilterTrackPropertyCondition>()
                {
                    new FilterTrackPropertyCondition(FilterTrackPropertyType.Type, track.TrackType, FilterTrackPropertyCompareOperation.Equal),
                    new FilterTrackPropertyCondition(FilterTrackPropertyType.Name, track.TrackName, FilterTrackPropertyCompareOperation.Equal)
                };

                includedTracks.Add(new FilterTrackSelection(conditions));
            }

            AssetFilter assetFilterParams = new AssetFilter(tracks: includedTracks);

            try
            {
                AssetFilter newAssetFilter = await this.MediaServicesV3SdkWrapper.AssetFiltersCreateOrUpdateAsync(
                    assetName,
                    filterName,
                    assetFilterParams)
                                             .ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                var msg = "AMS v3 Publish. Error when creating asset filter.";
                var exceptionToThrow = new GridwichPublicationAssetFilterCreateException(
                    assetName,
                    msg,
                    ex);

                // Providing additional specific details:
                exceptionToThrow.SafeAddToData("filterName", filterName);

                throw exceptionToThrow;
            }
        }