public async Task <IEnumerable <int> > TPTest <T, Q>(T[] values, Q value, int limit) where Q : T { Contract.Requires(values != null); Contract.Requires(Contract.ForAll(0, values.Length, i => !values[i].Equals(value))); Contract.Ensures(Contract.ForAll(Contract.Result <Task <IEnumerable <int> > >().Result, i => i < limit && Contract.Result <Task <IEnumerable <int> > >() != null)); Contract.EnsuresOnThrow <ArgumentException>(limit == 10); if (values.Length == 3) { throw new ArgumentException(); } var x = await NonGen.CountThem(values, value); if (x == 5) { throw new ArgumentException(); } return(GetValues(x, limit)); }