CA2261: Do not use ConfigureAwaitOptions.SuppressThrowing
with Task<TResult>
Property | Value |
---|---|
Rule ID | CA2261 |
Title | Do not use ConfigureAwaitOptions.SuppressThrowing with Task<TResult> |
Category | Usage |
Fix is breaking or non-breaking | Non-breaking |
Enabled by default in .NET 8 | As warning |
Cause
A value of ConfigureAwaitOptions.SuppressThrowing is passed to Task<TResult>.ConfigureAwait(ConfigureAwaitOptions).
Rule description
The ConfigureAwaitOptions.SuppressThrowing option isn't supported by the generic Task<TResult>, since that might lead to returning an invalid TResult
. This rule flags the use of SuppressThrowing with Task<TResult> to surface the error at build time rather than run time.
How to fix violations
Cast the Task<TResult> to a non-generic Task before calling ConfigureAwait(ConfigureAwaitOptions).
Example
The following code snippet shows a violation of CA2261:
Task<int> t = new Task<int>(() => 1);
t.ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);
The following code snippet shows the fix:
Task<int> t = new Task<int>(() => 1);
((Task)t).ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);
When to suppress errors
You shouldn't suppress warnings from this rule. If the task is faulted or canceled, TResult
will be invalid and cause run-time errors.
Σχόλια
https://aka.ms/ContentUserFeedback.
Σύντομα διαθέσιμα: Καθ' όλη τη διάρκεια του 2024 θα καταργήσουμε σταδιακά τα ζητήματα GitHub ως μηχανισμό ανάδρασης για το περιεχόμενο και θα το αντικαταστήσουμε με ένα νέο σύστημα ανάδρασης. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα:Υποβολή και προβολή σχολίων για