private static AccountInfo GetSuitableAccount(string screenName, string listName) { var acInfo = AccountStorage.Get(screenName); if (acInfo == null) { acInfo = AccountStorage.GetRandom(ai => ai.IsFollowingList(screenName, listName), true); } return(acInfo); }
private static UserViewModel DownloadUser(string userScreenName) { ManualResetEvent mre; lock (semaphoreAccessLocker) { if (!strSemaphores.TryGetValue(userScreenName, out mre)) { strSemaphores.Add(userScreenName, new ManualResetEvent(false)); } } if (mre != null) { mre.WaitOne(); return(Get(userScreenName)); } try { var acc = AccountStorage.GetRandom(ai => true, true); if (acc != null) { try { var ud = acc.GetUserByScreenName(userScreenName); if (ud != null) { var uvm = new UserViewModel(ud); using (lockWrap.GetWriterLock()) { if (dictionary.ContainsKey(ud.NumericId)) { dictionary[ud.NumericId] = uvm; } else { dictionary.Add(ud.NumericId, uvm); } } return(uvm); } } catch (Exception e) { ExceptionStorage.Register(e, ExceptionCategory.TwitterError, "ユーザー情報の受信に失敗しました。(ユーザー @" + userScreenName + " を アカウント @" + acc.ScreenName + " で受信しようとしました。)"); } return(null); } else { return(null); } } finally { lock (semaphoreAccessLocker) { if (strSemaphores.ContainsKey(userScreenName)) { strSemaphores[userScreenName].Set(); strSemaphores.Remove(userScreenName); } } } }