The following are the diagnostic analyzers installed with the Microsoft.VisualStudio.Threading.Analyzers NuGet package.
| ID | Title | Severity | Supports | Default diagnostic severity |
|---|---|---|---|---|
| VSTHRD001 | Avoid legacy thread switching methods | Critical | 1st rule | 🔡 Warning |
| VSTHRD002 | Avoid problematic synchronous waits | Critical | 2nd rule | Warning |
| VSTHRD003 | Avoid awaiting foreign Tasks | Critical | 3rd rule | Warning |
| VSTHRD004 | Await SwitchToMainThreadAsync | Critical | 1st rule | Error |
| VSTHRD010 | Invoke single-threaded types on Main thread | Critical | 1st rule | Warning |
| VSTHRD011 | Use AsyncLazy<T> |
Critical | 3rd rule | Error |
| VSTHRD012 | Provide JoinableTaskFactory where allowed | Critical | All rules | Warning |
| VSTHRD100 | Avoid async void methods |
Advisory | Warning | |
| VSTHRD101 | Avoid unsupported async delegates | Advisory | VSTHRD100 | Warning |
| VSTHRD102 | Implement internal logic asynchronously | Advisory | 2nd rule | Info |
| VSTHRD103 | Call async methods when in an async method | Advisory | Warning | |
| VSTHRD104 | Offer async option | Advisory | Info | |
| VSTHRD105 | Avoid method overloads that assume TaskScheduler.Current |
Advisory | Warning | |
| VSTHRD106 | Use InvokeAsync to raise async events |
Advisory | Warning | |
| VSTHRD107 | Await Task within using expression | Advisory | Error | |
| VSTHRD108 | Assert thread affinity unconditionally | Advisory | 1st rule, VSTHRD010 | Warning |
| VSTHRD109 | Switch instead of assert in async methods | Advisory | 1st rule | Error |
| VSTHRD110 | Observe result of async calls | Advisory | Warning | |
| VSTHRD111 | Use .ConfigureAwait(bool) |
Advisory | Hidden | |
| VSTHRD112 | Implement System.IAsyncDisposable |
Advisory | Info | |
| VSTHRD113 | Check for System.IAsyncDisposable |
Advisory | Info | |
| VSTHRD114 | Avoid returning null from a Task-returning method. |
Advisory | Warning | |
| VSTHRD200 | Use Async naming convention |
Guideline | VSTHRD103 | Warning |
| Severity | IDs | Analyzer catches... |
|---|---|---|
| Critical | 1-99 | Code issues that often result in deadlocks |
| Advisory | 100-199 | Code that may perform differently than intended or lead to occasional deadlocks |
| Guideline | 200-299 | Code that deviates from best practices and may limit the benefits of other analyzers |
| Icon | Meaning |
|---|---|
| 🔡 | The analyzer only produces diagnostics when configured. |
Some analyzers' behavior can be configured. See our configuration topic for more information.