internal static async Task Run(double minScore, bool log, ScoreSettings settings) { var botsOrDead = await GetBotsOrDead(minScore); using (var logger = new ThreadedLogger($"{settings.mode}.log", log)) using (var pbar = new ProgressBar(botsOrDead.Count)) { logger.LogMessage($"# {settings.mode} started {DateTime.Now.ToLongDateString()} " + $"{DateTime.Now.ToLongTimeString()}"); var actions = botsOrDead .Select(item => { var(follower, score) = item; return(InvokeAction(follower, score, logger, pbar, settings)); }).ToArray(); Task.WaitAll(actions); } settings.onComplete !.Invoke(botsOrDead.Count); }
private static async Task InvokeAction(IUser follower, double score, ThreadedLogger logger, ProgressBar pbar, ScoreSettings settings) { if (settings.onUserAsync != null) { await settings.onUserAsync !.Invoke(follower); } settings.onUser?.Invoke(follower, logger, score); pbar.Tick($"Processed @{follower.UserIdentifier.ScreenName}"); }