Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | valore |
|---|---|
| ID regola | CA2247 |
| Title | L'argomento passato al costruttore di TaskCompletionSource dovrebbe essere l'enum TaskCreationOptions invece dell'enum TaskContinuationOptions. |
| Categoria | Utilizzo |
| La correzione causa un'interruzione o meno | Non rompente |
| Abilitato per impostazione predefinita in .NET 10 | A titolo di avvertimento |
| Linguaggi applicabili | C# e Visual Basic |
Causa
Costruzione di un System.Threading.Tasks.TaskCompletionSource con un valore di enumerazione System.Threading.Tasks.TaskContinuationOptions anziché un valore di enumerazione System.Threading.Tasks.TaskCreationOptions.
Utilizzo del System.Object.ReferenceEquals metodo per testare uno o più tipi di valore per verificare l'uguaglianza.
Descrizione regola
Il tipo TaskCompletionSource ha un costruttore che accetta un System.Threading.Tasks.TaskCreationOptions valore di enumerazione e un altro costruttore che accetta un oggetto Object. Se si passa accidentalmente un System.Threading.Tasks.TaskContinuationOptions valore di enumerazione anziché un System.Threading.Tasks.TaskCreationOptions valore di enumerazione, verrà chiamato il costruttore basato su Object: compilato ed eseguito, ma non avrà il comportamento previsto.
Come correggere le violazioni
Per correggere la violazione, sostituire il valore enum System.Threading.Tasks.TaskContinuationOptions con il corrispondente valore enum System.Threading.Tasks.TaskCreationOptions.
// Violation
var tcs = new TaskCompletionSource<int>(TaskContinuationOptions.RunContinuationsAsynchronously);
// Fixed
var tcs = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
Quando eliminare gli avvisi
Una violazione di questa regola evidenzia quasi sempre un bug nel codice chiamante, in modo che il codice non si comporti come previsto dallo sviluppatore, con TaskCompletionSource ignorando effettivamente l'opzione specificata. L'unico momento in cui è sicuro sopprimere l'avviso è se lo sviluppatore ha effettivamente intenzione di passare un boxed System.Threading.Tasks.TaskContinuationOptions come argomento dello stato dell'oggetto a TaskCompletionSource.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA2247
// The code that's violating the rule is on this line.
#pragma warning restore CA2247
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA2247.severity = none
Per disabilitare questa intera categoria di regole, impostare la gravità per la categoria su none nel file di configurazione.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.