Skip to content

Conversation

@Caleb-D
Copy link

@Caleb-D Caleb-D commented May 5, 2023

add note on usage of NotOnFaulted regarding chains of continuation tasks

add note on usage of NotOnFaulted regarding chains of continuation tasks
@Caleb-D Caleb-D requested a review from kouvel as a code owner May 5, 2023 15:47
@ghost ghost added community-contribution Indicates that the PR has been added by a community member area-System.Threading.Tasks labels May 5, 2023
@ghost
Copy link

ghost commented May 5, 2023

Tagging subscribers to this area: @dotnet/area-system-threading-tasks
See info in area-owners.md if you want to be subscribed.

Issue Details

add note on usage of NotOnFaulted regarding chains of continuation tasks

Author: Caleb-D
Assignees: -
Labels:

area-System.Threading.Tasks, community-contribution

Milestone: -

@learn-build-service-prod
Copy link

Learn Build status updates of commit ea2870f:

✅ Validation status: passed

File Status Preview URL Details
xml/System.Threading.Tasks/TaskContinuationOptions.xml ✅Succeeded View

For more details, please refer to the build report.

For any questions, please:

<summary>Specifies that the continuation task should not be scheduled if its antecedent was canceled. An antecedent is canceled if its <see cref="P:System.Threading.Tasks.Task.Status" /> property upon completion is <see cref="F:System.Threading.Tasks.TaskStatus.Canceled" />. This option is not valid for multi-task continuations.</summary>
<summary>Specifies that the continuation task should not be scheduled if its antecedent was canceled. An antecedent is canceled if its <see cref="P:System.Threading.Tasks.Task.Status" /> property upon completion is <see cref="F:System.Threading.Tasks.TaskStatus.Canceled" />. This option is not valid for multi-task continuations.

Note: if you intend that a chain of continuation tasks should stop when one of the tasks throws an exception, use the flag <see cref="OnlyOnRanToCompletion"/> on all the continuation tasks instead of <see cref="NotOnFaulted"/>.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not really sure what benefit this is adding. It's also not entirely accurate; a task might end as canceled without there having ever been an exception involved.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess the documentation is not clear enough. This is just the use case I ran into. I had to create myself a test project and reverse engineer how these TaskContinuationOptions flags actually worked.

Maybe this isn't the best way to address this problem, but at least it would be nice to know that myContinuedTask.Status->Canceled when previousTask.Status==Faulted and myContinuedTask.ContinuationOptions=NotOnFaulted, and that myContinuedTask2 will still be scheduled.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, "multi-task continuations" seems vague and ambiguous. Are we talking about a chain of more than one continuation? Or a fan-out of continuations on one task? And does "not valid" mean you get a runtime exception, compile exception, undefined behavior? etc.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, "multi-task continuations" seems vague and ambiguous.

It's referring to the APIs that let you create continuations from multiple tasks, e.g. TaskFactory.ContinueWhenAll.

Copy link
Author

@Caleb-D Caleb-D May 5, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, thanks for clarifying.

Where do you suggest we go from here as far as documentation? Maybe I'm not the best one to make the changes since I don't have detailed knowledge of all the details.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm still not totally clear on what additional information you'd hope to see in the docs.

This particular enum value being edited is "NotOnCanceled" and it states "Specifies that the continuation task should not be scheduled if its antecedent was canceled." Is your concern that it doesn't spell out what state this continuation task will be in if the antecedent completes as Canceled? i.e. you'd want it to also say "If the antecedent ends in a canceled state, this continuation task will transition to a canceled state."?

Copy link
Author

@Caleb-D Caleb-D May 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think "If the antecedent ends in a canceled state, this continuation task will transition to a canceled state." would be a slight improvement. At least that helps me realize that not being scheduled doesn't mean "it gets discarded (and therefore any continuation tasks dependent on this continuation task get discarded)," which is what I initially thought.

You could follow that sentence with "Note that any continuation tasks dependent on this continuation task will still be scheduled, dependent on their TaskContinuationOptions."

@gewarren
Copy link
Contributor

Closing this PR based on age and lack of closure in unresolved conversation.

@gewarren gewarren closed this Sep 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-System.Threading.Tasks community-contribution Indicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants