/// <summary>
 /// Conduct a synchronous experiment
 /// </summary>
 /// <typeparam name="T">The return type of the experiment</typeparam>
 /// <param name="scientist">The scientist implementation to use</param>
 /// <param name="name">Name of the experiment</param>
 /// <param name="experiment">Experiment callback used to configure the experiment</param>
 /// <returns>The value of the experiment's control function.</returns>
 public static T Experiment <T>(this IScientist scientist, string name, Action <IExperiment <T> > experiment) =>
 scientist.Experiment <T, T>(
     name,
     e =>
 {
     e.Clean(NoOpClean);
     experiment(e);
 });
 /// <summary>
 /// Conduct an asynchronous experiment
 /// </summary>
 /// <typeparam name="T">The return type of the experiment</typeparam>
 /// <param name="scientist">The scientist implementation to use</param>
 /// <param name="name">Name of the experiment</param>
 /// <param name="concurrentTasks">Number of tasks to run concurrently</param>
 /// <param name="experiment">Experiment callback used to configure the experiment</param>
 /// <returns>The value of the experiment's control function.</returns>
 public static Task <T> ExperimentAsync <T>(this IScientist scientist, string name, int concurrentTasks, Action <IExperimentAsync <T> > experiment) =>
 scientist.ExperimentAsync <T, T>(
     name,
     concurrentTasks,
     e =>
 {
     e.Clean(NoOpClean);
     experiment(e);
 });
 /// <summary>
 /// Conduct an asynchronous experiment
 /// </summary>
 /// <typeparam name="T">The return type of the experiment</typeparam>
 /// <typeparam name="TClean">The clean type for publishing.</typeparam>
 /// <param name="scientist">The scientist implementation to use</param>
 /// <param name="name">Name of the experiment</param>
 /// <param name="experiment">Experiment callback used to configure the experiment</param>
 /// <returns>The value of the experiment's control function.</returns>
 public static Task <T> ExperimentAsync <T, TClean>(this IScientist scientist, string name, Action <IExperimentAsync <T, TClean> > experiment) =>
 scientist.ExperimentAsync(name, 1, experiment);