Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 70b9da2

Browse files
committed
The inthread finally handler only gets called at the very end
1 parent 3af4561 commit 70b9da2

File tree

1 file changed

+6
-11
lines changed

1 file changed

+6
-11
lines changed

src/GitHub.Api/Tasks/TaskBase.cs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public interface ITask : IAsyncResult
1919
ITask Catch(Func<Exception, bool> handler);
2020
ITask Finally(Action handler);
2121
ITask Finally(Action<bool, Exception> actionToContinueWith, TaskAffinity affinity = TaskAffinity.Concurrent);
22+
ITask Finally<T>(T taskToContinueWith) where T : ITask;
2223
ITask Start();
2324
ITask Start(TaskScheduler scheduler);
2425
ITask Progress(Action<IProgress> progressHandler);
@@ -180,14 +181,11 @@ public ITask Finally(Action handler)
180181
public ITask Finally(Action<bool, Exception> actionToContinueWith, TaskAffinity affinity = TaskAffinity.Concurrent)
181182
{
182183
Guard.ArgumentNotNull(actionToContinueWith, nameof(actionToContinueWith));
183-
var ret = Then(new ActionTask(Token, actionToContinueWith) { Affinity = affinity, Name = "Finally" }, TaskRunOptions.Always);
184-
DependsOn?.SetFaultHandler(ret);
185-
ret.ContinuationIsFinally = true;
186-
return ret;
184+
return Finally(new ActionTask(Token, actionToContinueWith) { Affinity = affinity, Name = "Finally" });
187185
}
188186

189-
internal virtual ITask Finally<T>(T taskToContinueWith)
190-
where T : TaskBase
187+
public ITask Finally<T>(T taskToContinueWith)
188+
where T : ITask
191189
{
192190
Guard.ArgumentNotNull(taskToContinueWith, nameof(taskToContinueWith));
193191
continuationAlways = (TaskBase)(object)taskToContinueWith;
@@ -340,7 +338,7 @@ protected virtual void RaiseOnStart()
340338
protected virtual void RaiseOnEnd()
341339
{
342340
OnEnd?.Invoke(this);
343-
if (continuationOnSuccess == null && continuationOnFailure == null)
341+
if (continuationOnSuccess == null && continuationOnFailure == null && continuationAlways == null)
344342
finallyHandler?.Invoke();
345343
//Logger.Trace($"Finished {ToString()}");
346344
}
@@ -396,7 +394,6 @@ public override string ToString()
396394
protected ILogging Logger { get { return logger = logger ?? LogHelper.GetLogger(GetType()); } }
397395
public TaskBase DependsOn { get; private set; }
398396
public CancellationToken Token { get; }
399-
internal bool ContinuationIsFinally { get; set; }
400397
}
401398

402399
abstract class TaskBase<TResult> : TaskBase, ITask<TResult>
@@ -495,7 +492,6 @@ public ITask<TResult> Finally(Func<bool, Exception, TResult, TResult> continuati
495492
{
496493
Guard.ArgumentNotNull(continuation, "continuation");
497494
var ret = Then(new FuncTask<TResult, TResult>(Token, continuation) { Affinity = affinity, Name = "Finally" }, TaskRunOptions.Always);
498-
ret.ContinuationIsFinally = true;
499495
DependsOn?.SetFaultHandler(ret);
500496
return ret;
501497
}
@@ -504,7 +500,6 @@ public ITask Finally(Action<bool, Exception, TResult> continuation, TaskAffinity
504500
{
505501
Guard.ArgumentNotNull(continuation, "continuation");
506502
var ret = Then(new ActionTask<TResult>(Token, continuation) { Affinity = affinity, Name = "Finally" }, TaskRunOptions.Always);
507-
ret.ContinuationIsFinally = true;
508503
DependsOn?.SetFaultHandler(ret);
509504
return ret;
510505
}
@@ -547,7 +542,7 @@ protected override void RaiseOnStart()
547542
protected virtual void RaiseOnEnd(TResult result)
548543
{
549544
OnEnd?.Invoke(this, result);
550-
if (continuationOnSuccess == null && continuationOnFailure == null)
545+
if (continuationOnSuccess == null && continuationOnFailure == null && continuationAlways == null)
551546
finallyHandler?.Invoke(result);
552547
//Logger.Trace($"Finished {ToString()} {result}");
553548
}

0 commit comments

Comments
 (0)