public static List <Fight> PlayMultiple(int numberOfTimes, Fighter f1, Fighter f2, FightPlan fp1, FightPlan fp2, FightOptions options) { int perEach = numberOfTimes / 20; var results = new ConcurrentBag <List <Fight> >(); Parallel.For(0, 20, (i) => { FightTracker tracker = new FightTracker(f1, f2, fp1.Copy(), fp2.Copy(), options); List <Fight> resTemp = tracker.PlayFights(perEach); results.Add(resTemp); }); List <Fight> ret = results.SelectMany(fr => fr).ToList(); if (ret.Count < numberOfTimes) { int numSim = ret.Count - numberOfTimes; FightTracker tracker = new FightTracker(f1, f2, fp1.Copy(), fp2.Copy(), options); var v = tracker.PlayFights(numSim); foreach (var res in v) { ret.Add(res); } } return(ret); }