From 7f0bea3a3a6140583016fbd04f9eca41be1a9ba8 Mon Sep 17 00:00:00 2001 From: Kimura Youichi Date: Sun, 1 Dec 2019 00:17:36 +0900 Subject: [PATCH] =?utf8?q?TimelineScheduler.Update*=20=E3=81=AEdelegate?= =?utf8?q?=E3=82=92=20Task.Run=20=E3=81=AE=E5=86=85=E5=81=B4=E3=81=A7?= =?utf8?q?=E5=AE=9F=E8=A1=8C=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit delegate 内で例外が発生した場合に RunUpdateTasks の途中で中断されてしまうのを防ぐため --- OpenTween/TimelineScheduler.cs | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/OpenTween/TimelineScheduler.cs b/OpenTween/TimelineScheduler.cs index 2006800e..07648d81 100644 --- a/OpenTween/TimelineScheduler.cs +++ b/OpenTween/TimelineScheduler.cs @@ -23,6 +23,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -239,61 +240,59 @@ namespace OpenTween private async Task RunUpdateTasks(UpdateTask tasks, DateTimeUtc now) { - var updateTasks = new List(capacity: 7); - - // LastUpdate* を次の時刻に更新してから Update* を実行すること - // (LastUpdate* が更新されずに Update* が例外を投げると無限ループに陥る) + var updateTasks = new List>(capacity: 7); if ((tasks & UpdateTask.Home) == UpdateTask.Home) { this.LastUpdateHome = now; if (this.UpdateHome != null) - updateTasks.Add(this.UpdateHome()); + updateTasks.Add(this.UpdateHome); } if ((tasks & UpdateTask.Mention) == UpdateTask.Mention) { this.LastUpdateMention = now; if (this.UpdateMention != null) - updateTasks.Add(this.UpdateMention()); + updateTasks.Add(this.UpdateMention); } if ((tasks & UpdateTask.Dm) == UpdateTask.Dm) { this.LastUpdateDm = now; if (this.UpdateDm != null) - updateTasks.Add(this.UpdateDm()); + updateTasks.Add(this.UpdateDm); } if ((tasks & UpdateTask.PublicSearch) == UpdateTask.PublicSearch) { this.LastUpdatePublicSearch = now; if (this.UpdatePublicSearch != null) - updateTasks.Add(this.UpdatePublicSearch()); + updateTasks.Add(this.UpdatePublicSearch); } if ((tasks & UpdateTask.User) == UpdateTask.User) { this.LastUpdateUser = now; if (this.UpdateUser != null) - updateTasks.Add(this.UpdateUser()); + updateTasks.Add(this.UpdateUser); } if ((tasks & UpdateTask.List) == UpdateTask.List) { this.LastUpdateList = now; if (this.UpdateList != null) - updateTasks.Add(this.UpdateList()); + updateTasks.Add(this.UpdateList); } if ((tasks & UpdateTask.Config) == UpdateTask.Config) { this.LastUpdateConfig = now; if (this.UpdateConfig != null) - updateTasks.Add(this.UpdateConfig()); + updateTasks.Add(this.UpdateConfig); } - await Task.WhenAll(updateTasks).ConfigureAwait(false); + await Task.WhenAll(updateTasks.Select(x => Task.Run(x))) + .ConfigureAwait(false); } private TimeSpan NextTimerDelay() -- 2.11.0