This repository has been archived by the owner on Jan 23, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Improve ManualResetValueTaskSource prototype #29468
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
In .NET Core 2.1 we added the public `IValueTaskSource` and `IValueTaskSource<T>` interfaces, with associated support in `ValueTask` and `ValueTask<T>`, and while we implemented the interfaces on several types internally, we didn't expose any public implementations. We should consider exposing several in the future, including a manual-reset and an auto-reset IValueTaskSource implementation. We already have a ManualResetValueTaskSource implementation in our tests. This commit improves upon it in a few ways: - Separates out the logic into a separate public struct. The ManualResetValueTaskSource class wraps the struct, giving developers a choice to either use the class directly, or to embed the struct in their own implementation. - Fixes context capture to behave more similarly to Task, handling both SynchronizationContext and TaskSchedulers - Adds a prototype implementation of an IAsyncEnumerable, demonstrating how the compiler could utilize ManualResetValueTaskSourceLogic in its implementation. This is all still prototype, used only in tests.
So |
With what I've prototyped out here:
|
baulig
pushed a commit
to mono/corefx
that referenced
this pull request
Feb 4, 2019
In .NET Core 2.1 we added the public `IValueTaskSource` and `IValueTaskSource<T>` interfaces, with associated support in `ValueTask` and `ValueTask<T>`, and while we implemented the interfaces on several types internally, we didn't expose any public implementations. We should consider exposing several in the future, including a manual-reset and an auto-reset IValueTaskSource implementation. We already have a ManualResetValueTaskSource implementation in our tests. This commit improves upon it in a few ways: - Separates out the logic into a separate public struct. The ManualResetValueTaskSource class wraps the struct, giving developers a choice to either use the class directly, or to embed the struct in their own implementation. - Fixes context capture to behave more similarly to Task, handling both SynchronizationContext and TaskSchedulers - Adds a prototype implementation of an IAsyncEnumerable, demonstrating how the compiler could utilize ManualResetValueTaskSourceLogic in its implementation. This is all still prototype, used only in tests. (cherry picked from commit df43abb)
baulig
pushed a commit
to mono/corefx
that referenced
this pull request
Feb 4, 2019
In .NET Core 2.1 we added the public `IValueTaskSource` and `IValueTaskSource<T>` interfaces, with associated support in `ValueTask` and `ValueTask<T>`, and while we implemented the interfaces on several types internally, we didn't expose any public implementations. We should consider exposing several in the future, including a manual-reset and an auto-reset IValueTaskSource implementation. We already have a ManualResetValueTaskSource implementation in our tests. This commit improves upon it in a few ways: - Separates out the logic into a separate public struct. The ManualResetValueTaskSource class wraps the struct, giving developers a choice to either use the class directly, or to embed the struct in their own implementation. - Fixes context capture to behave more similarly to Task, handling both SynchronizationContext and TaskSchedulers - Adds a prototype implementation of an IAsyncEnumerable, demonstrating how the compiler could utilize ManualResetValueTaskSourceLogic in its implementation. This is all still prototype, used only in tests. (cherry picked from commit df43abb)
picenka21
pushed a commit
to picenka21/runtime
that referenced
this pull request
Feb 18, 2022
In .NET Core 2.1 we added the public `IValueTaskSource` and `IValueTaskSource<T>` interfaces, with associated support in `ValueTask` and `ValueTask<T>`, and while we implemented the interfaces on several types internally, we didn't expose any public implementations. We should consider exposing several in the future, including a manual-reset and an auto-reset IValueTaskSource implementation. We already have a ManualResetValueTaskSource implementation in our tests. This commit improves upon it in a few ways: - Separates out the logic into a separate public struct. The ManualResetValueTaskSource class wraps the struct, giving developers a choice to either use the class directly, or to embed the struct in their own implementation. - Fixes context capture to behave more similarly to Task, handling both SynchronizationContext and TaskSchedulers - Adds a prototype implementation of an IAsyncEnumerable, demonstrating how the compiler could utilize ManualResetValueTaskSourceLogic in its implementation. This is all still prototype, used only in tests. Commit migrated from dotnet/corefx@df43abb
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In .NET Core 2.1 we added the public
IValueTaskSource
andIValueTaskSource<T>
interfaces, with associated support inValueTask
andValueTask<T>
, and while we implemented the interfaces on several types internally, we didn't expose any public implementations.We should consider exposing several in the future, including a manual-reset and an auto-reset IValueTaskSource implementation. We already have a ManualResetValueTaskSource implementation in our tests. This commit improves upon it in a few ways:
This is all still prototype, used only in tests.
cc: @jcouv, @davidfowl, @kouvel, @tarekgh