fix(WRK-33): observe the discarded command-task wrapper's fault
TryStartCommandTask discarded ObserveCommandTaskAsync's task without a fault-observing continuation -- the one gap in the NEXT-04 discipline applied everywhere else in this file. ObserveCommandTaskAsync only swallows OperationCanceledException, so any other exception escaping ProcessCommandAsync's own catch path would fault the discarded wrapper and surface only as a finalizer-time unobserved-task exception. Wrap it with the existing ObserveFaultWhenever helper, same as every other discarded task in this file.
This commit is contained in:
@@ -1232,7 +1232,14 @@ public sealed class WorkerPipeSession
|
|||||||
_activeCommandTasks.Add(commandTask);
|
_activeCommandTasks.Add(commandTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = ObserveCommandTaskAsync(commandTask);
|
// WRK-33: every other discarded task in this file is wrapped with ObserveFaultWhenever
|
||||||
|
// (NEXT-04 discipline) so a fault reaching the finalizer unobserved is impossible. This
|
||||||
|
// wrapper task was the one exception — ObserveCommandTaskAsync only swallows
|
||||||
|
// OperationCanceledException, so any other exception escaping ProcessCommandAsync's own
|
||||||
|
// catch path (e.g. a future edit, or a failure past TryWriteFaultAsync's narrow filter)
|
||||||
|
// would fault the discarded task with no observer. Close the gap the same way the rest of
|
||||||
|
// the file does.
|
||||||
|
ObserveFaultWhenever(ObserveCommandTaskAsync(commandTask));
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ObserveCommandTaskAsync(Task commandTask)
|
private async Task ObserveCommandTaskAsync(Task commandTask)
|
||||||
|
|||||||
Reference in New Issue
Block a user