public Task <long> CreateAsync <T>(SubscriptionCriteria <T> criteria, string database = null)
        {
            if (criteria == null)
            {
                throw new InvalidOperationException("Cannot create a subscription if criteria is null");
            }

            var nonGenericCriteria = new SubscriptionCriteria();

            nonGenericCriteria.BelongsToAnyCollection = new [] { documentStore.Conventions.GetTypeTagName(typeof(T)) };
            nonGenericCriteria.KeyStartsWith          = criteria.KeyStartsWith;
            nonGenericCriteria.PropertiesMatch        = criteria.GetPropertiesMatchStrings();
            nonGenericCriteria.PropertiesNotMatch     = criteria.GetPropertiesNotMatchStrings();

            return(CreateAsync(nonGenericCriteria, database));
        }