@@ -122,6 +122,7 @@ protected TaskBase(CancellationToken token)
122
122
Token = token ;
123
123
Task = new Task ( ( ) =>
124
124
{
125
+ Token . ThrowIfCancellationRequested ( ) ;
125
126
var previousIsSuccessful = previousSuccess . HasValue ? previousSuccess . Value : ( DependsOn ? . Successful ?? true ) ;
126
127
Run ( previousIsSuccessful ) ;
127
128
} ,
@@ -134,6 +135,8 @@ protected TaskBase(Task task)
134
135
{
135
136
Task = new Task ( t =>
136
137
{
138
+ Token . ThrowIfCancellationRequested ( ) ;
139
+
137
140
var scheduler = TaskManager . GetScheduler ( Affinity ) ;
138
141
RaiseOnStart ( ) ;
139
142
var tk = ( ( Task ) t ) ;
@@ -142,6 +145,7 @@ protected TaskBase(Task task)
142
145
if ( tk . Status == TaskStatus . Created && ! tk . IsCompleted &&
143
146
( ( tk . CreationOptions & ( TaskCreationOptions ) 512 ) == TaskCreationOptions . None ) )
144
147
{
148
+ Token . ThrowIfCancellationRequested ( ) ;
145
149
tk . RunSynchronously ( scheduler ) ;
146
150
}
147
151
}
@@ -150,6 +154,7 @@ protected TaskBase(Task task)
150
154
Errors = ex . Message ;
151
155
if ( ! RaiseFaultHandlers ( ex ) )
152
156
throw ;
157
+ Token . ThrowIfCancellationRequested ( ) ;
153
158
}
154
159
finally
155
160
{
@@ -278,7 +283,12 @@ public T Finally<T>(T taskToContinueWith)
278
283
/// <param name="handler"></param>
279
284
internal void SetFaultHandler ( TaskBase handler )
280
285
{
281
- Task . ContinueWith ( t => handler . Start ( t ) , Token ,
286
+ Task . ContinueWith ( t =>
287
+ {
288
+ Token . ThrowIfCancellationRequested ( ) ;
289
+ handler . Start ( t ) ;
290
+ } ,
291
+ Token ,
282
292
TaskContinuationOptions . OnlyOnFaulted ,
283
293
TaskManager . GetScheduler ( handler . Affinity ) ) ;
284
294
DependsOn ? . SetFaultHandler ( handler ) ;
@@ -356,9 +366,15 @@ protected void SetContinuation()
356
366
357
367
protected void SetContinuation ( TaskBase continuation , TaskContinuationOptions runOptions )
358
368
{
359
- Task . ContinueWith ( _ => ( ( TaskBase ) ( object ) continuation ) . Run ( ) , Token ,
360
- runOptions ,
361
- TaskManager . GetScheduler ( continuation . Affinity ) ) ;
369
+ Token . ThrowIfCancellationRequested ( ) ;
370
+ Task . ContinueWith ( _ =>
371
+ {
372
+ Token . ThrowIfCancellationRequested ( ) ;
373
+ ( ( TaskBase ) ( object ) continuation ) . Run ( ) ;
374
+ } ,
375
+ Token ,
376
+ runOptions ,
377
+ TaskManager . GetScheduler ( continuation . Affinity ) ) ;
362
378
}
363
379
364
380
protected ITask SetDependsOn ( ITask dependsOn )
@@ -406,6 +422,7 @@ public virtual void Run(bool success)
406
422
taskFailed = false ;
407
423
hasRun = false ;
408
424
exception = null ;
425
+ Token . ThrowIfCancellationRequested ( ) ;
409
426
}
410
427
411
428
protected virtual void RaiseOnStart ( )
@@ -526,6 +543,7 @@ protected TaskBase(CancellationToken token)
526
543
{
527
544
Task = new Task < TResult > ( ( ) =>
528
545
{
546
+ Token . ThrowIfCancellationRequested ( ) ;
529
547
var previousIsSuccessful = previousSuccess . HasValue ? previousSuccess . Value : ( DependsOn ? . Successful ?? true ) ;
530
548
var ret = RunWithReturn ( previousIsSuccessful ) ;
531
549
tcs . SetResult ( ret ) ;
@@ -538,6 +556,8 @@ protected TaskBase(Task<TResult> task)
538
556
{
539
557
Task = new Task < TResult > ( t =>
540
558
{
559
+ Token . ThrowIfCancellationRequested ( ) ;
560
+
541
561
TResult ret = default ( TResult ) ;
542
562
RaiseOnStart ( ) ;
543
563
var tk = ( ( Task < TResult > ) t ) ;
@@ -546,6 +566,7 @@ protected TaskBase(Task<TResult> task)
546
566
if ( tk . Status == TaskStatus . Created && ! tk . IsCompleted &&
547
567
( ( tk . CreationOptions & ( TaskCreationOptions ) 512 ) == TaskCreationOptions . None ) )
548
568
{
569
+ Token . ThrowIfCancellationRequested ( ) ;
549
570
tk . RunSynchronously ( ) ;
550
571
}
551
572
ret = tk . Result ;
@@ -555,6 +576,7 @@ protected TaskBase(Task<TResult> task)
555
576
Errors = ex . Message ;
556
577
if ( ! RaiseFaultHandlers ( ex ) )
557
578
throw ;
579
+ Token . ThrowIfCancellationRequested ( ) ;
558
580
}
559
581
finally
560
582
{
@@ -626,8 +648,7 @@ public ITask<TResult> Finally(Action<bool, TResult> handler)
626
648
public ITask < TResult > Finally ( Func < bool , Exception , TResult , TResult > continuation , TaskAffinity affinity = TaskAffinity . Concurrent )
627
649
{
628
650
Guard . ArgumentNotNull ( continuation , "continuation" ) ;
629
- var ret = Then ( new FuncTask < TResult , TResult > ( Token , continuation ) { Affinity = affinity , Name = "Finally" } , TaskRunOptions . OnAlways ) ;
630
- return ret ;
651
+ return Then ( new FuncTask < TResult , TResult > ( Token , continuation ) { Affinity = affinity , Name = "Finally" } , TaskRunOptions . OnAlways ) ;
631
652
}
632
653
633
654
/// <summary>
@@ -636,8 +657,7 @@ public ITask<TResult> Finally(Func<bool, Exception, TResult, TResult> continuati
636
657
public ITask Finally ( Action < bool , Exception , TResult > continuation , TaskAffinity affinity = TaskAffinity . Concurrent )
637
658
{
638
659
Guard . ArgumentNotNull ( continuation , "continuation" ) ;
639
- var ret = Then ( new ActionTask < TResult > ( Token , continuation ) { Affinity = affinity , Name = "Finally" } , TaskRunOptions . OnAlways ) ;
640
- return ret ;
660
+ return Then ( new ActionTask < TResult > ( Token , continuation ) { Affinity = affinity , Name = "Finally" } , TaskRunOptions . OnAlways ) ;
641
661
}
642
662
643
663
public new ITask < TResult > Start ( )
@@ -704,13 +724,13 @@ public TaskBase(CancellationToken token)
704
724
{
705
725
Task = new Task < TResult > ( ( ) =>
706
726
{
727
+ Token . ThrowIfCancellationRequested ( ) ;
707
728
var previousIsSuccessful = previousSuccess . HasValue ? previousSuccess . Value : ( DependsOn ? . Successful ?? true ) ;
708
729
T prevResult = previousIsSuccessful && DependsOn != null && DependsOn is ITask < T > ? ( ( ITask < T > ) DependsOn ) . Result : default ( T ) ;
709
730
var ret = RunWithData ( previousIsSuccessful , prevResult ) ;
710
731
tcs . SetResult ( ret ) ;
711
732
return ret ;
712
- } ,
713
- Token , TaskCreationOptions . None ) ;
733
+ } , Token , TaskCreationOptions . None ) ;
714
734
}
715
735
716
736
public TaskBase ( Task < TResult > task )
@@ -764,4 +784,4 @@ public enum TaskAffinity
764
784
Exclusive ,
765
785
UI
766
786
}
767
- }
787
+ }
0 commit comments