public static async Task <int> ExecuteAync(Arguments arguments)
        {
            if (arguments == null)
            {
                arguments = new Arguments()
                {
                    DurationSeconds = 20.0,
                    Jitter          = 0.2,
                    Parallel        = true,
                    Seed            = null,
                };
            }

            Log.Info("Starting dummy analysis");

            Random random;

            if (arguments.Seed.HasValue)
            {
                Log.InfoFormat("Using given seed #{0}", arguments.Seed.Value);
                random = new Random(arguments.Seed.Value);
            }
            else
            {
                int seed = Environment.TickCount;
                random = new Random(seed);
                Log.InfoFormat("Using a generated seed #{0}", seed);
            }

            int tasks = arguments.Parallel ? Environment.ProcessorCount : 1;

            TimeSpan[] durations = new TimeSpan[tasks];

            double normalDuration = arguments.DurationSeconds;
            double jitterDuration = normalDuration * arguments.Jitter;

            for (int i = 0; i < durations.Length; i++)
            {
                double sample   = random.NextDouble();
                var    duration = normalDuration + ((jitterDuration * sample * 2.0) - jitterDuration);

                durations[i] = TimeSpan.FromSeconds(duration);
            }

            Log.InfoFormat("Starting {0} threads", tasks);
            var task = Task.WhenAll(durations.Select((d, i) => ConcurrentTask(d, i)));

            var result = await LoggedConsole.WriteWaitingLineAndWait(task);

            //Parallel.ForEach(durations, ParallelTask);

            Log.Info("Completed all work: " + result.Aggregate(string.Empty, (s, l) => s + ", " + l));

            return(ExceptionLookup.Ok);
        }