private static async Task Main() { var ps = Process.GetCurrentProcess(); ps.PriorityClass = ProcessPriorityClass.RealTime; ServiceInjector.ConfigureServices(); InjectServices(); FillConfigurations(); System.Console.Clear(); var blackListedUserIds = _userService.GetBannedIds().Distinct().ToList(); var badUsers = GetGroupsMembersByGroupIds(_blackListGroupIds, blackListedUserIds); if (_blacklistMembersOfChatId != null) { var chatUsers = _messagesService.GeChatUsers(_blacklistMembersOfChatId.ToList(), true); System.Console.WriteLine($"chatUsers count is {chatUsers.Count}"); badUsers.AddRange(chatUsers); } //var badUsers = GetCachedBlacklistUsers(); System.Console.WriteLine($"About to prepare list badUsers.Count is {badUsers.Count}."); var cities = _citiesService.GetCities(_cityIds, false); var totalUsersList = PrepareUserList(badUsers, blackListedUserIds, cities); System.Console.WriteLine($"List has been prepared, totalUsersList.Count is {totalUsersList.Count}."); BlackListUserList(totalUsersList); System.Console.WriteLine("Start collecting users for background work"); var usersForBackgroundWork = await GetUsersForBackgroundWork(cities, blackListedUserIds, 1000); var friedsOfUserIds = new List <UserExtended>(); if (_blacklistFriendsOfUserId.Any()) { foreach (var userId in _blacklistFriendsOfUserId) { var friends = _userService.GetFriends(userId); friedsOfUserIds.AddRange(friends); } } friedsOfUserIds = friedsOfUserIds.Where(f => blackListedUserIds.Contains(f.Id)).Select(f => f).ToList(); using (var api = _apiFactory.CreateVkApi()) { foreach (var f in friedsOfUserIds) { var needBlackList = SatisfyBySecondAlgorithm(f); if (!needBlackList) { continue; } var message = string.Empty; TimeSpan sleep; try { var blackListResult = BlackListUser(f, api); sleep = blackListResult ? TimeSpan.FromMinutes(MinutesToSleepInBackgroundWork) : TimeSpan.FromSeconds(0); message = ActionResultLogMessage(f, blackListResult); } catch (Exception e) { sleep = HandleException(e, f, null, null, ref message); } System.Console.WriteLine(message); System.Threading.Thread.Sleep(sleep); } foreach (var f in usersForBackgroundWork) { var needBlackList = SatisfyBySecondAlgorithm(f); if (!needBlackList) { continue; } var message = string.Empty; TimeSpan sleep; try { var blackListResult = BlackListUser(f, api); sleep = blackListResult ? TimeSpan.FromMinutes(MinutesToSleepInBackgroundWork) : TimeSpan.FromSeconds(0); message = ActionResultLogMessage(f, blackListResult); } catch (Exception e) { sleep = HandleException(e, f, null, null, ref message); } System.Console.WriteLine(message); System.Threading.Thread.Sleep(sleep); } } }