Return ValueTask
instead of Task
for read/write APIs.
#2953
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.
Issues
This pull request fixes #2816 .
Description
Refactor read/write APIs to return
ValueTask
instead ofTask
to improve performance and reduce allocations. This PR targets read and write APIs because those are buffered and may complete synchronously most of the time. This PR also only target the core library and not the client. This PR does not change all async APIs fromTask
toValueTask
, some APIs are intentional left as-is, for example in the following scenarios:FlushAsync()
methods still returnTask
. We don't expectFlushAsync()
to complete synchronously because the method is intended to force the I/O operation.Task
(e.g. when inheriting fromTextWriter
).Here are classes where I have made changes from
Task
toValueTask
. Let me know if I missed any:IJsonWriter
IJsonReader
JsonWriter
ODataUtf8JsonWriter
and its nested classesODataOutputContext
ODataMessageWriter
ODataInputContext
TODO: refactor or remove the custom
FollowOnSuccessWith
andFollowAlwaysMethod
and otherTaskUtils
helpers.Removed
ValidateBufferArguments
fromTranscodingWriteStream
method because it's now inherited fromStream
. We should also remove our the customTranscodingWriteStream
and replace it with the built-in one.Benchmarks before
Checklist (Uncheck if it is not completed)
Additional work necessary
If documentation update is needed, please add "Docs Needed" label to the issue and provide details about the required document change in the issue.