Zzz – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 using System;
2 using System.Threading;
3 using System.Threading.Tasks;
4  
5 namespace Zzz.Utilities
6 {
7 public class ScheduledContinuation : IDisposable
8 {
9 #region Constructors, Destructors and Finalizers
10  
11 public void Dispose()
12 {
13 if (_cancellationTokenSource != null)
14 {
15 _cancellationTokenSource?.Cancel();
16 _cancellationTokenSource = null;
17 }
18 }
19  
20 #endregion
21  
22 #region Private Delegates, Events, Enums, Properties, Indexers and Fields
23  
24 private CancellationTokenSource _cancellationTokenSource;
25  
26 private Task _task;
27  
28 #endregion
29  
30 #region Public Methods
31  
32 public void Schedule(TimeSpan delay, System.Action execute, CancellationToken cancellationToken)
33 {
34 try
35 {
36 if (_task != null)
37 {
38 _cancellationTokenSource?.Cancel();
39 _cancellationTokenSource = null;
40 _task = null;
41 }
42 }
43 catch
44 {
45 // Ignore errors.
46 }
47 finally
48 {
49 _cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
50 }
51  
52 _task = Task.Delay(delay, _cancellationTokenSource.Token)
53 .ContinueWith(task =>
54 {
55 try
56 {
57 execute.Invoke();
58 }
59 catch (Exception exception) when (exception is ObjectDisposedException ||
60 exception is OperationCanceledException)
61 {
62 }
63 }, _cancellationTokenSource.Token);
64 }
65  
66 public void Schedule(int delay, System.Action execute, CancellationToken cancellationToken)
67 {
68 try
69 {
70 if (_task != null)
71 {
72 _cancellationTokenSource?.Cancel();
73 _cancellationTokenSource = null;
74 _task = null;
75 }
76 }
77 catch
78 {
79 // Ignore errors.
80 }
81 finally
82 {
83 _cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
84 }
85  
86 _task = Task.Delay(delay, _cancellationTokenSource.Token)
87 .ContinueWith(task =>
88 {
89 try
90 {
91 execute.Invoke();
92 }
93 catch (Exception exception) when (exception is ObjectDisposedException ||
94 exception is OperationCanceledException)
95 {
96 }
97 }, _cancellationTokenSource.Token);
98 }
99  
100 #endregion
101 }
102 }