OSDN Git Service

Revert "タイムライン更新に30秒以上掛かっている場合は完了を待機せず次のタイマーを開始させる"
authorKimura Youichi <kim.upsilon@bucyou.net>
Mon, 20 May 2024 15:12:44 +0000 (00:12 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Mon, 20 May 2024 15:12:44 +0000 (00:12 +0900)
This reverts commit 7cb5a25483d1f185076458e830021d4f17068c15.

OpenTween/TimelineScheduler.cs

index 115b691..df5388a 100644 (file)
@@ -135,22 +135,12 @@ namespace OpenTween
             {
                 this.preventTimerUpdate = true;
 
-                var (taskTypes, updateTasks) = this.systemResumeMode
+                var updateTasks = this.systemResumeMode
                     ? this.TimerCallback_AfterSystemResume()
                     : this.TimerCallback_Normal();
 
-                var updateTask = updateTasks.RunAll(runOnThreadPool: true);
-
-                // すべてのコールバック関数の Task が完了してから次のタイマーの待機時間を計算する
-                // ただし、30 秒を超過した場合はエラー報告のダイアログを表示した上で完了を待たずにタイマーを再開する
-                // (タイムライン更新が停止する不具合が報告される件への暫定的な対処)
-                var timeout = Task.Delay(TimeSpan.FromSeconds(30));
-                if (await Task.WhenAny(updateTask, timeout) == timeout)
-                {
-                    var message = "タイムライン更新が規定時間内に完了しませんでした: " +
-                        string.Join(", ", taskTypes);
-                    throw new Exception(message);
-                }
+                await updateTasks.RunAll(runOnThreadPool: true)
+                    .ConfigureAwait(false);
             }
             finally
             {
@@ -159,7 +149,7 @@ namespace OpenTween
             }
         }
 
-        private (TimelineSchedulerTaskType[] TaskTypes, TaskCollection Task) TimerCallback_Normal()
+        private TaskCollection TimerCallback_Normal()
         {
             var now = DateTimeUtc.Now;
             var round = TimeSpan.FromSeconds(1); // 1秒未満の差異であればまとめて実行する
@@ -172,17 +162,16 @@ namespace OpenTween
                     tasks.Add(taskType);
             }
 
-            return (tasks.ToArray(), this.RunUpdateTasks(tasks, now));
+            return this.RunUpdateTasks(tasks, now);
         }
 
-        private (TimelineSchedulerTaskType[] TaskTypes, TaskCollection Task) TimerCallback_AfterSystemResume()
+        private TaskCollection TimerCallback_AfterSystemResume()
         {
             // systemResumeMode では一定期間経過後に全てのタイムラインを更新する
             var now = DateTimeUtc.Now;
 
             this.systemResumeMode = false;
-            var taskTypes = TimelineScheduler.AllTaskTypes;
-            return (taskTypes, this.RunUpdateTasks(taskTypes, now));
+            return this.RunUpdateTasks(TimelineScheduler.AllTaskTypes, now);
         }
 
         private TaskCollection RunUpdateTasks(IEnumerable<TimelineSchedulerTaskType> taskTypes, DateTimeUtc now)