Skip to content
Closed
Show file tree
Hide file tree
Changes from 165 commits
Commits
Show all changes
168 commits
Select commit Hold shift + click to select a range
ff06168
Merge pull request #9 from Chris-Wolfgang/copilot/update-codeql-workflow
Chris-Wolfgang Feb 1, 2026
6d4d098
Initial plan
Copilot Feb 1, 2026
347ab22
Fix CodeQL workflow find command syntax with parentheses
Copilot Feb 1, 2026
b10019f
Merge pull request #11 from Chris-Wolfgang/copilot/update-codeql-work…
Chris-Wolfgang Feb 1, 2026
4642228
Merge branch 'main' into develop
Chris-Wolfgang Feb 1, 2026
43f9978
Merge branch 'main' into develop
Chris-Wolfgang Feb 1, 2026
267b308
Initial plan
Copilot Feb 1, 2026
72e99b6
Add code formatting enforcement infrastructure
Copilot Feb 1, 2026
e30c621
Improve .editorconfig with global defaults
Copilot Feb 1, 2026
e94fd81
Merge pull request #12 from Chris-Wolfgang/copilot/add-code-formattin…
Chris-Wolfgang Feb 1, 2026
f583321
Update .github/workflows/pr.yaml
Chris-Wolfgang Feb 1, 2026
a9bba6a
Initial plan
Copilot Feb 1, 2026
1df400c
Add dotnet-format installation step to pr.yaml workflow
Copilot Feb 1, 2026
5468db3
Merge pull request #14 from Chris-Wolfgang/copilot/sub-pr-13
Chris-Wolfgang Feb 1, 2026
0a4ec97
Initial plan
Copilot Feb 1, 2026
715f883
Fix format.ps1 Windows PowerShell compatibility with Allman braces an…
Copilot Feb 1, 2026
7f5e6c4
Merge pull request #15 from Chris-Wolfgang/copilot/fix-parse-error-fo…
Chris-Wolfgang Feb 1, 2026
9e0e15b
Initial plan
Copilot Feb 1, 2026
1303bcb
Fix PowerShell script encoding with UTF-8 BOM and CRLF
Copilot Feb 1, 2026
6b1431a
Merge pull request #16 from Chris-Wolfgang/copilot/fix-format-ps1-par…
Chris-Wolfgang Feb 1, 2026
06b5809
Update .github/workflows/pr.yaml
Chris-Wolfgang Feb 1, 2026
62c5ec7
Update format.ps1
Chris-Wolfgang Feb 1, 2026
ef8d395
Update README-FORMATTING.md
Chris-Wolfgang Feb 1, 2026
03457c4
Update .editorconfig
Chris-Wolfgang Feb 1, 2026
f9942fc
Initial plan
Copilot Feb 1, 2026
77ba7c4
Initial plan
Copilot Feb 1, 2026
813eb79
Add .gitattributes file for consistent line ending handling
Copilot Feb 1, 2026
a3a1197
Initial plan
Copilot Feb 1, 2026
6194c48
Add .gitattributes for consistent line ending handling
Copilot Feb 1, 2026
a62fced
Initial plan
Copilot Feb 1, 2026
a7f43bd
Fix .gitattributes to treat SVG files as text
Copilot Feb 1, 2026
f338963
Merge pull request #17 from Chris-Wolfgang/copilot/sub-pr-8
Chris-Wolfgang Feb 1, 2026
e5c8641
Add var preference rules to .editorconfig
Copilot Feb 1, 2026
916a432
Add csharp_style_var_elsewhere for comprehensive var coverage
Copilot Feb 1, 2026
2bf03ed
Merge pull request #20 from Chris-Wolfgang/copilot/sub-pr-8-yet-again
Chris-Wolfgang Feb 1, 2026
682d76a
Merge pull request #19 from Chris-Wolfgang/copilot/sub-pr-8-another-one
Chris-Wolfgang Feb 1, 2026
166d593
Apply suggestions from code review
Chris-Wolfgang Feb 1, 2026
6e44a7a
Merge branch 'develop' into copilot/sub-pr-8-again
Chris-Wolfgang Feb 1, 2026
0e277eb
Merge branch 'develop' into copilot/add-code-formatting-enforcement
Chris-Wolfgang Feb 1, 2026
7690e21
Merge pull request #13 from Chris-Wolfgang/copilot/add-code-formattin…
Chris-Wolfgang Feb 1, 2026
31aa458
Merge pull request #18 from Chris-Wolfgang/copilot/sub-pr-8-again
Chris-Wolfgang Feb 1, 2026
79b5d39
Initial plan
Copilot Feb 1, 2026
c0b4703
Update README-FORMATTING.md
Chris-Wolfgang Feb 1, 2026
36de9e0
Update .editorconfig
Chris-Wolfgang Feb 1, 2026
1fc2e08
Plan: Update .editorconfig var_elsewhere setting per review feedback
Copilot Feb 1, 2026
e62fc0c
Update .editorconfig
Chris-Wolfgang Feb 1, 2026
1843455
Update .github/workflows/pr.yaml
Chris-Wolfgang Feb 1, 2026
710cebb
Update csharp_style_var_elsewhere to false per review feedback
Copilot Feb 1, 2026
6a45980
Update .gitattributes
Chris-Wolfgang Feb 1, 2026
1ce4753
Initial plan
Copilot Feb 1, 2026
151abf2
Update .gitattributes
Chris-Wolfgang Feb 1, 2026
f15647e
Initial plan
Copilot Feb 1, 2026
6544501
Merge pull request #21 from Chris-Wolfgang/copilot/sub-pr-8
Chris-Wolfgang Feb 1, 2026
6b61cc5
Add code formatting enforcement with dotnet format
Copilot Feb 1, 2026
b665a21
Merge pull request #22 from Chris-Wolfgang/copilot/sub-pr-8-again
Chris-Wolfgang Feb 1, 2026
7736c2c
Merge pull request #23 from Chris-Wolfgang/copilot/sub-pr-8-another-one
Chris-Wolfgang Feb 1, 2026
dca614d
Initial plan
Copilot Feb 1, 2026
5839f42
Initial plan
Copilot Feb 1, 2026
45b969e
Merge pull request #24 from Chris-Wolfgang/copilot/sub-pr-8
Chris-Wolfgang Feb 1, 2026
fb1d678
Add csharp_max_line_length and improve wrapping comments in .editorco…
Copilot Feb 1, 2026
0b26ef0
Merge pull request #25 from Chris-Wolfgang/copilot/update-editorconfi…
Chris-Wolfgang Feb 1, 2026
e05317d
Format.ps1
Chris-Wolfgang Feb 1, 2026
f43a56f
Merge branch 'develop' of https://github.com/Chris-Wolfgang/IAsyncEum…
Chris-Wolfgang Feb 1, 2026
54c256d
Initial plan
Copilot Feb 1, 2026
278ebf0
Initial plan
Copilot Feb 1, 2026
4e9125a
Initial plan
Copilot Feb 1, 2026
5fc0708
Disable file header requirements in .editorconfig
Copilot Feb 1, 2026
8d922da
Merge pull request #26 from Chris-Wolfgang/copilot/sub-pr-8
Chris-Wolfgang Feb 1, 2026
610ee38
Merge pull request #28 from Chris-Wolfgang/copilot/update-editorconfi…
Chris-Wolfgang Feb 1, 2026
c96bfe9
Merge pull request #27 from Chris-Wolfgang/copilot/sub-pr-8-again
Chris-Wolfgang Feb 1, 2026
98fc9fc
Initial plan
Copilot Feb 1, 2026
b52a46c
Add directory-specific StyleCop rules to .editorconfig
Copilot Feb 1, 2026
d3d8c1a
Merge pull request #29 from Chris-Wolfgang/copilot/update-editorconfi…
Chris-Wolfgang Feb 1, 2026
dd036e2
Initial plan
Copilot Feb 1, 2026
719e702
Add IDE1006 and CA1707 diagnostic suppressions for test/benchmark/exa…
Copilot Feb 1, 2026
f2d4634
Merge pull request #30 from Chris-Wolfgang/copilot/update-editorconfi…
Chris-Wolfgang Feb 1, 2026
c8002f2
Initial plan
Copilot Feb 1, 2026
969a5f3
Add Roslyn analyzers for code quality and async/await patterns
Copilot Feb 1, 2026
d421509
Address code review feedback on analyzer comments
Copilot Feb 1, 2026
fb11bba
Initial plan
Copilot Feb 1, 2026
49b3cef
Disable VSTHRD111 analyzer rule for synchronous Cancel()
Copilot Feb 1, 2026
2667fac
Address PR review feedback: enable EnforceCodeStyleInBuild, fix analy…
Copilot Feb 1, 2026
b84cc83
Refine CA1510 comment for clarity (.NET 6.0+ only)
Copilot Feb 1, 2026
b1ba9f4
Merge pull request #32 from Chris-Wolfgang/copilot/disable-vsthrd111-…
Chris-Wolfgang Feb 1, 2026
bd9c013
Add explicit configurations for all analyzer rules to avoid surprises
Copilot Feb 1, 2026
7b63371
Merge pull request #31 from Chris-Wolfgang/copilot/add-roslyn-analyzers
Chris-Wolfgang Feb 1, 2026
fce36d5
Initial plan
Copilot Feb 1, 2026
98fb7d1
Fix analyzer configuration: suppress SA0001, CA1849, and NetAnalyzers…
Copilot Feb 1, 2026
2b68316
Merge pull request #33 from Chris-Wolfgang/copilot/fix-analyzer-confi…
Chris-Wolfgang Feb 1, 2026
7d5df79
Enforce code quality and style in all project files
Chris-Wolfgang Feb 1, 2026
620bbba
Add ConfigureAwait(false) to async enumerator calls
Chris-Wolfgang Feb 1, 2026
50eac93
Improve async test cancellation and context handling
Chris-Wolfgang Feb 1, 2026
2423b8d
Allow 'var' usage by disabling IDE0008 analyzer rule
Chris-Wolfgang Feb 1, 2026
b81ac5e
Initial plan
Copilot Feb 1, 2026
f240b2b
Add three new code quality and security analyzers
Copilot Feb 1, 2026
3c503c5
Initial plan
Copilot Feb 1, 2026
a9a6448
Add BannedApiAnalyzers package and configuration
Copilot Feb 1, 2026
dfaff37
Update .editorconfig
Chris-Wolfgang Feb 1, 2026
d6e9b74
Update .editorconfig
Chris-Wolfgang Feb 1, 2026
af25148
Update Directory.Build.props
Chris-Wolfgang Feb 1, 2026
0c1bfc2
Update .editorconfig
Chris-Wolfgang Feb 1, 2026
a9490a7
Update BannedApiAnalyzers version to 4.14.0 and fix BannedSymbols.txt…
Copilot Feb 1, 2026
1aad9c8
Merge pull request #34 from Chris-Wolfgang/copilot/add-code-quality-a…
Chris-Wolfgang Feb 1, 2026
9b562fe
Merge branch 'develop' into copilot/add-banned-api-analyzers
Chris-Wolfgang Feb 1, 2026
d47efef
Update BannedSymbols.txt
Chris-Wolfgang Feb 1, 2026
4648c97
Update BannedSymbols.txt
Chris-Wolfgang Feb 1, 2026
c3bf921
Update BannedSymbols.txt
Chris-Wolfgang Feb 1, 2026
9569bb5
Update BannedSymbols.txt
Chris-Wolfgang Feb 1, 2026
e7b81d8
Address PR feedback: refine BannedSymbols.txt to reduce false positives
Copilot Feb 1, 2026
de40873
Merge pull request #35 from Chris-Wolfgang/copilot/add-banned-api-ana…
Chris-Wolfgang Feb 1, 2026
5eee967
Initial plan
Copilot Feb 1, 2026
b5b2714
Replace README.md and CONTRIBUTING.md with comprehensive documentation
Copilot Feb 1, 2026
bd17df6
Initial plan
Copilot Feb 1, 2026
4346158
Update README.md
Chris-Wolfgang Feb 1, 2026
e753297
Fix documentation issues from PR review feedback
Copilot Feb 1, 2026
4e15fae
Add SecurityCodeScan analyzer, update BannedSymbols.txt, and configur…
Copilot Feb 1, 2026
7b9f044
Complete static analysis setup: Add SecurityCodeScan, update BannedSy…
Copilot Feb 1, 2026
56ba679
Configure TreatWarningsAsErrors for Release builds only
Copilot Feb 1, 2026
c4f2ecb
Merge pull request #36 from Chris-Wolfgang/copilot/update-readme-and-…
Chris-Wolfgang Feb 1, 2026
b2d54d0
Remove deprecated methods from BannedSymbols.txt
Chris-Wolfgang Feb 1, 2026
e397f1b
Remove deprecated SecurityCodeScan.VS2019 package - rely on built-in …
Copilot Feb 1, 2026
ee4292d
Merge branch 'main' into develop
Chris-Wolfgang Feb 1, 2026
1da7cf5
Merge pull request #37 from Chris-Wolfgang/copilot/add-securitycodesc…
Chris-Wolfgang Feb 1, 2026
934cbdc
Initial plan
Copilot Feb 2, 2026
dba78ff
Apply suggestions from code review
Chris-Wolfgang Feb 2, 2026
50c31a1
Remove duplicate analyzer configuration from benchmarks project
Copilot Feb 2, 2026
767affc
Apply suggestions from code review
Chris-Wolfgang Feb 2, 2026
a4d7318
Update .editorconfig
Chris-Wolfgang Feb 2, 2026
f8c761b
Update .editorconfig
Chris-Wolfgang Feb 2, 2026
89c14a5
Update .editorconfig
Chris-Wolfgang Feb 2, 2026
4a91537
Initial plan
Copilot Feb 2, 2026
ec05360
Update README.md
Chris-Wolfgang Feb 2, 2026
7dfc959
Update .editorconfig
Chris-Wolfgang Feb 2, 2026
d6e9129
Update .editorconfig
Chris-Wolfgang Feb 2, 2026
d24b226
Initial plan
Copilot Feb 2, 2026
d26abab
Complete Step #2: Add missing banned APIs and fix build
Copilot Feb 2, 2026
0678034
Merge branch 'develop' into copilot/sub-pr-8-again
Chris-Wolfgang Feb 2, 2026
ef69830
Merge branch 'develop' into copilot/sub-pr-8
Chris-Wolfgang Feb 2, 2026
da168d2
Merge pull request #43 from Chris-Wolfgang/copilot/expand-banned-symb…
Chris-Wolfgang Feb 2, 2026
f37d52a
Merge pull request #41 from Chris-Wolfgang/copilot/sub-pr-8
Chris-Wolfgang Feb 2, 2026
3c2231c
Merge pull request #42 from Chris-Wolfgang/copilot/sub-pr-8-again
Chris-Wolfgang Feb 2, 2026
599d821
Initial plan
Copilot Feb 2, 2026
968ab1c
Update BannedSymbols.txt
Chris-Wolfgang Feb 2, 2026
4762fdc
Remove ConfigureAwait from test code
Copilot Feb 2, 2026
29e7a75
Initial plan
Copilot Feb 2, 2026
9a7e68c
Update .editorconfig
Chris-Wolfgang Feb 2, 2026
76870f8
Remove global documentation rules and add to src folder configuration
Copilot Feb 2, 2026
0c875c2
Update .editorconfig
Chris-Wolfgang Feb 2, 2026
bf5cb66
Initial plan
Copilot Feb 2, 2026
23b9c2f
Update src/Wolfgang.Extensions.IAsyncEnumerable/IAsyncEnumerableExten…
Chris-Wolfgang Feb 2, 2026
086ce39
Update CONTRIBUTING.md: correct analyzer count to 7 and remove StyleCop
Copilot Feb 2, 2026
dbd4113
Update README.md
Chris-Wolfgang Feb 2, 2026
ddd2e87
Initial plan
Copilot Feb 2, 2026
d0628cb
Remove ConfigureAwait calls from test code for consistency
Copilot Feb 2, 2026
79646ce
Merge pull request #44 from Chris-Wolfgang/copilot/sub-pr-8
Chris-Wolfgang Feb 2, 2026
c7b7906
Merge pull request #47 from Chris-Wolfgang/copilot/sub-pr-8-yet-again
Chris-Wolfgang Feb 2, 2026
333317b
Update CONTRIBUTING.md
Chris-Wolfgang Feb 2, 2026
51f44c8
Merge pull request #46 from Chris-Wolfgang/copilot/sub-pr-8-another-one
Chris-Wolfgang Feb 2, 2026
f580327
Merge pull request #45 from Chris-Wolfgang/copilot/sub-pr-8-again
Chris-Wolfgang Feb 2, 2026
9a0f832
Initial plan
Copilot Feb 2, 2026
cf867d0
Update all license references from MPL-2.0 to MIT
Copilot Feb 2, 2026
8324a0b
Merge pull request #48 from Chris-Wolfgang/copilot/sub-pr-8
Chris-Wolfgang Feb 2, 2026
18d8565
Initial plan
Copilot Feb 2, 2026
43025c5
Fix ConfigureAwait warnings in src/, tests/, and benchmarks/
Copilot Feb 2, 2026
e9d3250
Merge pull request #49 from Chris-Wolfgang/copilot/fix-codeql-configu…
Chris-Wolfgang Feb 2, 2026
74c8539
Initial plan
Copilot Feb 2, 2026
0e2b2ae
Configure .editorconfig to allow var usage throughout codebase
Copilot Feb 2, 2026
92eef40
Merge pull request #50 from Chris-Wolfgang/copilot/configure-editorco…
Chris-Wolfgang Feb 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
626 changes: 371 additions & 255 deletions .editorconfig

Large diffs are not rendered by default.

48 changes: 48 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Auto detect text files and perform LF normalization
* text=auto eol=lf

# Source code
*.cs text eol=lf
*.csx text eol=lf
*.vb text eol=lf
*.fs text eol=lf
*.fsx text eol=lf

# Scripts
*.sh text eol=lf
*.ps1 text eol=crlf


# Build and configuration files
*.xml text eol=lf
*.csproj text eol=lf
*.vbproj text eol=lf
*.fsproj text eol=lf
*.sln text eol=lf
*.slnx text eol=lf
*.props text eol=lf
*.targets text eol=lf
*.ruleset text eol=lf
*.config text eol=lf
*.json text eol=lf
*.yml text eol=lf
*.yaml text eol=lf

# Documentation
*.md text eol=lf
*.txt text eol=lf

# SVG files (XML-based text)
*.svg text eol=lf

# Denote all files that are truly binary and should not be modified
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.pdf binary
*.dll binary
*.exe binary
*.nupkg binary
*.snupkg binary
92 changes: 46 additions & 46 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,46 +1,46 @@
version: 2
updates:
- package-ecosystem: "nuget"
directory: "/" # Root - for solution-level dependencies
schedule:
interval: "weekly"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "dotnet"
- package-ecosystem: "nuget"
directory: "/src"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "dotnet"
- package-ecosystem: "nuget"
directory: "/tests"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "dotnet"
- package-ecosystem: "nuget"
directory: "/benchmarks"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "dotnet"
- package-ecosystem: "nuget"
directory: "/examples"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "dotnet"
version: 2
updates:
- package-ecosystem: "nuget"
directory: "/" # Root - for solution-level dependencies
schedule:
interval: "weekly"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "dotnet"

- package-ecosystem: "nuget"
directory: "/src"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "dotnet"

- package-ecosystem: "nuget"
directory: "/tests"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "dotnet"

- package-ecosystem: "nuget"
directory: "/benchmarks"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "dotnet"

- package-ecosystem: "nuget"
directory: "/examples"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "dotnet"
4 changes: 2 additions & 2 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ jobs:
run: |
echo "Building solution for CodeQL analysis..."

# Find solution file (.sln or .slnx)
solution=$(find . -maxdepth 2 -name "*.sln" -o -name "*.slnx" | head -n 1)
# Find solution file (.sln or .slnx) with correct syntax
solution=$(find . -maxdepth 2 \( -name "*.sln" -o -name "*.slnx" \) | head -n 1)

if [ -n "$solution" ]; then
echo "Found solution: $solution"
Expand Down
13 changes: 13 additions & 0 deletions .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,19 @@ jobs:
9.0.x
10.0.x

- name: Check Code Formatting
run: |
# Find solution file
solution=$(find . -maxdepth 2 \( -name "*.sln" -o -name "*.slnx" \) | head -n 1)

if [ -n "$solution" ]; then
echo "Checking formatting for: $solution"
dotnet format "$solution" --verify-no-changes --verbosity diagnostic
else
echo "No solution file found, checking entire workspace"
dotnet format --verify-no-changes --verbosity diagnostic
fi

- name: Restore and build (exclude .NET Framework 4.x projects)
run: |
echo "Finding all projects in solution..."
Expand Down
10 changes: 10 additions & 0 deletions .globalconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
is_global = true

# Global analyzer configuration
global_level = 9999

# Roslynator configuration
roslynator_accessibility_modifiers = explicit
roslynator_enum_has_flag_style = method
roslynator_object_creation_type_style = implicit_when_type_is_obvious
roslynator_use_anonymous_function_or_method_group = method_group
96 changes: 96 additions & 0 deletions BannedSymbols.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# BannedSymbols.txt - Async-First Enforcement for IAsyncEnumerable Extension Library
# Format: <API Documentation ID>; <Reason/Alternative>
# T: = Type, M: = Method, P: = Property, F: = Field
# Task.Wait() - All overloads - Absolutely NOT allowed in async code
M:System.Threading.Tasks.Task.Wait(); Use 'await' instead - this blocks the calling thread!
M:System.Threading.Tasks.Task.Wait(System.Int32); Use 'await' with CancellationToken timeout instead
M:System.Threading.Tasks.Task.Wait(System.TimeSpan); Use 'await' with CancellationToken timeout instead
M:System.Threading.Tasks.Task.Wait(System.Int32,System.Threading.CancellationToken); Use 'await' instead
M:System.Threading.Tasks.Task.Wait(System.Threading.CancellationToken); Use 'await' instead
# Task.WaitAll/WaitAny - Use async alternatives
M:System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[]); Use 'await Task.WhenAll()' instead
M:System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.Int32); Use 'await Task.WhenAll()' with CancellationToken instead
M:System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.TimeSpan); Use 'await Task.WhenAll()' with CancellationToken instead
M:System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.Int32,System.Threading.CancellationToken); Use 'await Task.WhenAll()' instead
M:System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.Threading.CancellationToken); Use 'await Task.WhenAll()' instead
M:System.Threading.Tasks.Task.WaitAny(System.Threading.Tasks.Task[]); Use 'await Task.WhenAny()' instead
M:System.Threading.Tasks.Task.WaitAny(System.Threading.Tasks.Task[],System.Int32); Use 'await Task.WhenAny()' with CancellationToken instead
M:System.Threading.Tasks.Task.WaitAny(System.Threading.Tasks.Task[],System.TimeSpan); Use 'await Task.WhenAny()' with CancellationToken instead
M:System.Threading.Tasks.Task.WaitAny(System.Threading.Tasks.Task[],System.Int32,System.Threading.CancellationToken); Use 'await Task.WhenAny()' instead
M:System.Threading.Tasks.Task.WaitAny(System.Threading.Tasks.Task[],System.Threading.CancellationToken); Use 'await Task.WhenAny()' instead
# Task<T>.Result - Blocking property access
P:System.Threading.Tasks.Task`1.Result; Blocking! Use 'await' instead to get the result asynchronously
# GetAwaiter().GetResult() - Also blocking
M:System.Runtime.CompilerServices.TaskAwaiter.GetResult(); Blocking! Use 'await' instead
M:System.Runtime.CompilerServices.TaskAwaiter`1.GetResult(); Blocking! Use 'await' instead
# Thread.Sleep - Use Task.Delay for async delays
M:System.Threading.Thread.Sleep(System.Int32); Use 'await Task.Delay()' instead for async-friendly delays
M:System.Threading.Thread.Sleep(System.TimeSpan); Use 'await Task.Delay()' instead for async-friendly delays
# Obsolete/Deprecated Threading APIs
M:System.Threading.Thread.Suspend(); Deprecated and dangerous
M:System.Threading.Thread.Resume(); Deprecated and dangerous
T:System.ComponentModel.BackgroundWorker; Use async/await patterns instead of BackgroundWorker
# Synchronous File I/O - Use async versions
M:System.IO.File.ReadAllText(System.String); Use 'File.ReadAllTextAsync()' instead
M:System.IO.File.ReadAllText(System.String,System.Text.Encoding); Use 'File.ReadAllTextAsync()' instead
M:System.IO.File.ReadAllLines(System.String); Use 'File.ReadAllLinesAsync()' instead
M:System.IO.File.ReadAllLines(System.String,System.Text.Encoding); Use 'File.ReadAllLinesAsync()' instead
M:System.IO.File.ReadAllBytes(System.String); Use 'File.ReadAllBytesAsync()' instead
M:System.IO.File.WriteAllText(System.String,System.String); Use 'File.WriteAllTextAsync()' instead
M:System.IO.File.WriteAllText(System.String,System.String,System.Text.Encoding); Use 'File.WriteAllTextAsync()' instead
M:System.IO.File.WriteAllLines(System.String,System.Collections.Generic.IEnumerable{System.String}); Use 'File.WriteAllLinesAsync()' instead
M:System.IO.File.WriteAllLines(System.String,System.Collections.Generic.IEnumerable{System.String},System.Text.Encoding); Use 'File.WriteAllLinesAsync()' instead
M:System.IO.File.WriteAllLines(System.String,System.String[]); Use 'File.WriteAllLinesAsync()' instead
M:System.IO.File.WriteAllLines(System.String,System.String[],System.Text.Encoding); Use 'File.WriteAllLinesAsync()' instead
M:System.IO.File.WriteAllBytes(System.String,System.Byte[]); Use 'File.WriteAllBytesAsync()' instead
M:System.IO.File.AppendAllText(System.String,System.String); Use 'File.AppendAllTextAsync()' instead
M:System.IO.File.AppendAllText(System.String,System.String,System.Text.Encoding); Use 'File.AppendAllTextAsync()' instead
M:System.IO.File.AppendAllLines(System.String,System.Collections.Generic.IEnumerable{System.String}); Use 'File.AppendAllLinesAsync()' instead
M:System.IO.File.AppendAllLines(System.String,System.Collections.Generic.IEnumerable{System.String},System.Text.Encoding); Use 'File.AppendAllLinesAsync()' instead
# Synchronous Stream operations - Use async versions for file I/O
M:System.IO.Stream.Read(System.Byte[],System.Int32,System.Int32); Use 'ReadAsync()' instead
M:System.IO.Stream.Write(System.Byte[],System.Int32,System.Int32); Use 'WriteAsync()' instead
M:System.IO.Stream.CopyTo(System.IO.Stream); Use 'CopyToAsync()' instead
M:System.IO.Stream.CopyTo(System.IO.Stream,System.Int32); Use 'CopyToAsync()' instead
M:System.IO.Stream.Flush(); Use 'FlushAsync()' instead
M:System.IO.FileStream.Read(System.Byte[],System.Int32,System.Int32); Use 'ReadAsync()' instead
M:System.IO.FileStream.Write(System.Byte[],System.Int32,System.Int32); Use 'WriteAsync()' instead
# TextReader
M:System.IO.TextReader.ReadToEnd(); Use 'ReadToEndAsync()' instead
M:System.IO.TextReader.ReadLine(); Use 'ReadLineAsync()' instead
M:System.IO.TextReader.Read(); Use 'ReadAsync()' instead
M:System.IO.TextReader.Read(System.Char[],System.Int32,System.Int32); Use 'ReadAsync()' instead
M:System.IO.TextReader.ReadBlock(System.Char[],System.Int32,System.Int32); Use 'ReadBlockAsync()' instead
# TextWriter
M:System.IO.TextWriter.Write(System.String); Use 'WriteAsync()' instead
M:System.IO.TextWriter.Write(System.Char); Use 'WriteAsync()' instead
M:System.IO.TextWriter.Write(System.Char[]); Use 'WriteAsync()' instead
M:System.IO.TextWriter.Write(System.Char[],System.Int32,System.Int32); Use 'WriteAsync()' instead
M:System.IO.TextWriter.WriteLine(); Use 'WriteLineAsync()' instead
M:System.IO.TextWriter.WriteLine(System.String); Use 'WriteLineAsync()' instead
M:System.IO.TextWriter.Flush(); Use 'FlushAsync()' instead
# Obsolete Network APIs - Use HttpClient
T:System.Net.WebClient; Obsolete - use HttpClient instead
T:System.Net.WebRequest; Obsolete - use HttpClient instead
T:System.Net.HttpWebRequest; Obsolete - use HttpClient instead
T:System.Net.HttpWebResponse; Obsolete - use HttpClient instead
M:System.Net.WebClient.DownloadString(System.String); Use 'HttpClient.GetStringAsync()' instead
M:System.Net.WebClient.DownloadData(System.String); Use 'HttpClient.GetByteArrayAsync()' instead
M:System.Net.WebClient.UploadString(System.String,System.String); Use 'HttpClient.PostAsync()' instead
# Obsolete/Insecure Serialization
T:System.Runtime.Serialization.Formatters.Binary.BinaryFormatter; Insecure and deprecated - use System.Text.Json.JsonSerializer instead
T:System.Runtime.Serialization.Formatters.Soap.SoapFormatter; Insecure and deprecated - use System.Text.Json.JsonSerializer instead
# DateTime Anti-patterns - Prefer DateTimeOffset for timezone safety
P:System.DateTime.Now; Use 'DateTimeOffset.UtcNow' or 'DateTimeOffset.Now' for timezone-aware operations
T:System.DateTime; Consider using 'DateTimeOffset' for timezone-safe date/time operations (especially in libraries)
# Synchronous Parallel operations - Use async alternatives
M:System.Threading.Tasks.Parallel.For(System.Int32,System.Int32,System.Action{System.Int32}); Synchronous - prefer async concurrency patterns (e.g., 'Task.WhenAll()', dataflow). On .NET 6+ targets, 'Parallel.ForEachAsync()' is also available.
M:System.Threading.Tasks.Parallel.For(System.Int32,System.Int32,System.Threading.Tasks.ParallelOptions,System.Action{System.Int32}); Synchronous - prefer async concurrency patterns (e.g., 'Task.WhenAll()', dataflow). On .NET 6+ targets, 'Parallel.ForEachAsync()' is also available.
M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0}); Synchronous - prefer async concurrency patterns (e.g., 'Task.WhenAll()', dataflow). On .NET 6+ targets, 'Parallel.ForEachAsync()' is also available.
M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Threading.Tasks.ParallelOptions,System.Action{``0}); Synchronous - prefer async concurrency patterns (e.g., 'Task.WhenAll()', dataflow). On .NET 6+ targets, 'Parallel.ForEachAsync()' is also available.
M:System.Threading.Tasks.Parallel.Invoke(System.Action[]); Synchronous - use 'Task.WhenAll()' with async delegates instead
# Console Blocking operations - Avoid in async code
M:System.Console.ReadLine(); Blocking - avoid in async code paths
M:System.Console.Read(); Blocking - avoid in async code paths
M:System.Console.ReadKey(); Blocking - avoid in async code paths
M:System.Console.ReadKey(System.Boolean); Blocking - avoid in async code paths
Loading
Loading