QuickImage – 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 QuickImage.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?.Dispose();
17 _cancellationTokenSource = null;
18 }
19 }
20  
21 #endregion
22  
23 #region Private Delegates, Events, Enums, Properties, Indexers and Fields
24  
25 private CancellationTokenSource _cancellationTokenSource;
26  
27 private Task _task;
28  
29 #endregion
30  
31 #region Public Methods
32  
33 public void Schedule(TimeSpan delay, Action execute, TaskScheduler taskScheduler, CancellationToken cancellationToken)
34 {
35 try
36 {
37 if (_task != null)
38 {
39 _cancellationTokenSource?.Cancel();
40 _cancellationTokenSource?.Dispose();
41 _cancellationTokenSource = null;
42 _task = null;
43 }
44 }
45 catch
46 {
47 // Ignore errors.
48 }
49 finally
50 {
51 _cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
52 }
53  
54 _task = Task.Delay(delay, _cancellationTokenSource.Token)
55 .ContinueWith(task =>
56 {
57 try
58 {
59 Task.Factory.StartNew(execute.Invoke, _cancellationTokenSource.Token, TaskCreationOptions.None, taskScheduler);
60 }
61 catch (Exception exception) when (exception is ObjectDisposedException ||
62 exception is OperationCanceledException)
63 {
64 }
65 }, _cancellationTokenSource.Token);
66 }
67  
68 public void Schedule(TimeSpan delay, Action execute, CancellationToken cancellationToken)
69 {
70 try
71 {
72 if (_task != null)
73 {
74 _cancellationTokenSource?.Cancel();
75 _cancellationTokenSource?.Dispose();
76 _cancellationTokenSource = null;
77 _task = null;
78 }
79 }
80 catch
81 {
82 // Ignore errors.
83 }
84 finally
85 {
86 _cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
87 }
88  
89 _task = Task.Delay(delay, _cancellationTokenSource.Token)
90 .ContinueWith(task =>
91 {
92 try
93 {
94 execute.Invoke();
95 }
96 catch (Exception exception) when (exception is ObjectDisposedException ||
97 exception is OperationCanceledException)
98 {
99 }
100 }, _cancellationTokenSource.Token);
101 }
102  
103 public void Schedule<T>(TimeSpan delay, T obj1, Action<T> execute, CancellationToken cancellationToken)
104 {
105 try
106 {
107 if (_task != null)
108 {
109 _cancellationTokenSource?.Cancel();
110 _cancellationTokenSource?.Dispose();
111 _cancellationTokenSource = null;
112 _task = null;
113 }
114 }
115 catch
116 {
117 // Ignore errors.
118 }
119 finally
120 {
121 _cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
122 }
123  
124 _task = Task.Delay(delay, _cancellationTokenSource.Token)
125 .ContinueWith(task =>
126 {
127 try
128 {
129 execute.Invoke(obj1);
130 }
131 catch (Exception exception) when (exception is ObjectDisposedException ||
132 exception is OperationCanceledException)
133 {
134 }
135 }, _cancellationTokenSource.Token);
136 }
137  
138 public void Schedule<T>(TimeSpan delay, T obj1, Action<T> execute, TaskScheduler taskScheduler, CancellationToken cancellationToken)
139 {
140 try
141 {
142 if (_task != null)
143 {
144 _cancellationTokenSource?.Cancel();
145 _cancellationTokenSource?.Dispose();
146 _cancellationTokenSource = null;
147 _task = null;
148 }
149 }
150 catch
151 {
152 // Ignore errors.
153 }
154 finally
155 {
156 _cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
157 }
158  
159 _task = Task.Delay(delay, _cancellationTokenSource.Token)
160 .ContinueWith(task =>
161 {
162 try
163 {
164 Task.Factory.StartNew(() => execute.Invoke(obj1), _cancellationTokenSource.Token, TaskCreationOptions.None, taskScheduler);
165 }
166 catch (Exception exception) when (exception is ObjectDisposedException ||
167 exception is OperationCanceledException)
168 {
169 }
170 }, _cancellationTokenSource.Token);
171 }
172  
173 public void Schedule(int delay, Action execute, CancellationToken cancellationToken)
174 {
175 try
176 {
177 if (_task != null)
178 {
179 _cancellationTokenSource?.Cancel();
180 _cancellationTokenSource?.Dispose();
181 _cancellationTokenSource = null;
182 _task = null;
183 }
184 }
185 catch
186 {
187 // Ignore errors.
188 }
189 finally
190 {
191 _cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
192 }
193  
194 _task = Task.Delay(delay, _cancellationTokenSource.Token)
195 .ContinueWith(task =>
196 {
197 try
198 {
199 execute.Invoke();
200 }
201 catch (Exception exception) when (exception is ObjectDisposedException ||
202 exception is OperationCanceledException)
203 {
204 }
205 }, _cancellationTokenSource.Token);
206 }
207  
208 #endregion
209 }
210 }