This repository was archived by the owner on Dec 5, 2024. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +57
-5
lines changed Expand file tree Collapse file tree 2 files changed +57
-5
lines changed Original file line number Diff line number Diff line change 5
5
6
6
namespace GitHub . Unity
7
7
{
8
+ class TaskQueue : TaskBase
9
+ {
10
+ private TaskCompletionSource < bool > aggregateTask = new TaskCompletionSource < bool > ( ) ;
11
+ private readonly List < ITask > queuedTasks = new List < ITask > ( ) ;
12
+ private volatile bool isSuccessful = true ;
13
+ private volatile Exception exception ;
14
+ private int finishedTaskCount ;
15
+
16
+ public TaskQueue ( ) : base ( )
17
+ {
18
+ Initialize ( aggregateTask . Task ) ;
19
+ }
20
+
21
+ public ITask Queue ( ITask task )
22
+ {
23
+ task . OnEnd += TaskFinished ;
24
+ queuedTasks . Add ( task ) ;
25
+ return this ;
26
+ }
27
+
28
+ public override ITask Start ( )
29
+ {
30
+ foreach ( var task in queuedTasks )
31
+ task . Start ( ) ;
32
+ return base . Start ( ) ;
33
+ }
34
+
35
+ private void TaskFinished ( ITask task , bool success , Exception ex )
36
+ {
37
+ var count = Interlocked . Increment ( ref finishedTaskCount ) ;
38
+ isSuccessful &= success ;
39
+ if ( ! success )
40
+ exception = ex ;
41
+ if ( count == queuedTasks . Count )
42
+ {
43
+ if ( isSuccessful )
44
+ {
45
+ aggregateTask . TrySetResult ( true ) ;
46
+ }
47
+ else
48
+ {
49
+ aggregateTask . TrySetException ( ex ) ;
50
+ }
51
+ }
52
+ }
53
+ }
54
+
8
55
class ActionTask : TaskBase
9
56
{
10
57
protected Action < bool > Callback { get ; }
Original file line number Diff line number Diff line change @@ -131,6 +131,16 @@ protected TaskBase(CancellationToken token)
131
131
132
132
protected TaskBase ( Task task )
133
133
: this ( )
134
+ {
135
+ Initialize ( task ) ;
136
+ }
137
+
138
+ protected TaskBase ( )
139
+ {
140
+ this . progress = new Progress ( this ) ;
141
+ }
142
+
143
+ protected void Initialize ( Task task )
134
144
{
135
145
Task = new Task ( t =>
136
146
{
@@ -158,11 +168,6 @@ protected TaskBase(Task task)
158
168
} , task , Token , TaskCreationOptions . None ) ;
159
169
}
160
170
161
- protected TaskBase ( )
162
- {
163
- this . progress = new Progress ( this ) ;
164
- }
165
-
166
171
public virtual T Then < T > ( T nextTask , TaskRunOptions runOptions = TaskRunOptions . OnSuccess , bool taskIsTopOfChain = false )
167
172
where T : ITask
168
173
{
You can’t perform that action at this time.
0 commit comments