• R/O
  • HTTP
  • SSH
  • HTTPS

open-tween: Commit

開発に使用するリポジトリ


Commit MetaInfo

Revision7f0bea3a3a6140583016fbd04f9eca41be1a9ba8 (tree)
Time2019-12-01 00:17:36
AuthorKimura Youichi <kim.upsilon@bucy...>
CommiterKimura Youichi

Log Message

TimelineScheduler.Update* のdelegateを Task.Run の内側で実行する

delegate 内で例外が発生した場合に RunUpdateTasks の途中で中断されてしまうのを防ぐため

Change Summary

Incremental Difference

--- a/OpenTween/TimelineScheduler.cs
+++ b/OpenTween/TimelineScheduler.cs
@@ -23,6 +23,7 @@
2323
2424 using System;
2525 using System.Collections.Generic;
26+using System.Linq;
2627 using System.Threading;
2728 using System.Threading.Tasks;
2829
@@ -239,61 +240,59 @@ namespace OpenTween
239240
240241 private async Task RunUpdateTasks(UpdateTask tasks, DateTimeUtc now)
241242 {
242- var updateTasks = new List<Task>(capacity: 7);
243-
244- // LastUpdate* を次の時刻に更新してから Update* を実行すること
245- // (LastUpdate* が更新されずに Update* が例外を投げると無限ループに陥る)
243+ var updateTasks = new List<Func<Task>>(capacity: 7);
246244
247245 if ((tasks & UpdateTask.Home) == UpdateTask.Home)
248246 {
249247 this.LastUpdateHome = now;
250248 if (this.UpdateHome != null)
251- updateTasks.Add(this.UpdateHome());
249+ updateTasks.Add(this.UpdateHome);
252250 }
253251
254252 if ((tasks & UpdateTask.Mention) == UpdateTask.Mention)
255253 {
256254 this.LastUpdateMention = now;
257255 if (this.UpdateMention != null)
258- updateTasks.Add(this.UpdateMention());
256+ updateTasks.Add(this.UpdateMention);
259257 }
260258
261259 if ((tasks & UpdateTask.Dm) == UpdateTask.Dm)
262260 {
263261 this.LastUpdateDm = now;
264262 if (this.UpdateDm != null)
265- updateTasks.Add(this.UpdateDm());
263+ updateTasks.Add(this.UpdateDm);
266264 }
267265
268266 if ((tasks & UpdateTask.PublicSearch) == UpdateTask.PublicSearch)
269267 {
270268 this.LastUpdatePublicSearch = now;
271269 if (this.UpdatePublicSearch != null)
272- updateTasks.Add(this.UpdatePublicSearch());
270+ updateTasks.Add(this.UpdatePublicSearch);
273271 }
274272
275273 if ((tasks & UpdateTask.User) == UpdateTask.User)
276274 {
277275 this.LastUpdateUser = now;
278276 if (this.UpdateUser != null)
279- updateTasks.Add(this.UpdateUser());
277+ updateTasks.Add(this.UpdateUser);
280278 }
281279
282280 if ((tasks & UpdateTask.List) == UpdateTask.List)
283281 {
284282 this.LastUpdateList = now;
285283 if (this.UpdateList != null)
286- updateTasks.Add(this.UpdateList());
284+ updateTasks.Add(this.UpdateList);
287285 }
288286
289287 if ((tasks & UpdateTask.Config) == UpdateTask.Config)
290288 {
291289 this.LastUpdateConfig = now;
292290 if (this.UpdateConfig != null)
293- updateTasks.Add(this.UpdateConfig());
291+ updateTasks.Add(this.UpdateConfig);
294292 }
295293
296- await Task.WhenAll(updateTasks).ConfigureAwait(false);
294+ await Task.WhenAll(updateTasks.Select(x => Task.Run(x)))
295+ .ConfigureAwait(false);
297296 }
298297
299298 private TimeSpan NextTimerDelay()
Show on old repository browser