Drop the Shuffle
convenience method.
#314
Merged
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.
Rarely used or recommended, the
Shuffle
convenience method was provided for three reasons:Random
instance, which has a long history of thread safety issues where the behavior and proper solution varied greatly from .NET Framework, to .NET Core/5, to .NET 6+. Bottling up the recommendation in a convenience method hid the use ofRandom
while using it safely..NET 6 introduced
Random.Shared
for unambiguous thread safety..NET 8 introduced
Random.Shuffle<T>(...)
for the in-place shuffling of a span or array.The extension method easily misled end users to perform shuffling during the Discovery phase, instead of the Execution phase, which isn't wrong but would easily lead to only shuffling test methods within a class, for instance, while the test class order remained fixed, without being apparent to the developer. Users will be better off altering test order in their Execution phase where the full impact of their implementation will be more clear.
Now that we target .NET 8+, we have no reason to continue maintaining or suggesting this code. Users can call
Random.Shared.Shuffle(...)
and ideally in theirIExecution
implementation.