Condividi tramite


CA2008: Non creare attività senza passare un TaskScheduler

Proprietà valore
ID regola CA2008
Titolo Non creare attività senza passare un elemento TaskScheduler
Categoria Affidabilità
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 No

Causa

Un'operazione di creazione o continuazione di un'attività usa un overload del metodo che non specifica un TaskScheduler parametro.

Descrizione regola

I metodi di creazione e continuazione delle attività .NET seguenti includono overload che consentono di specificare o omettere un'istanza TaskScheduler :

Specificare sempre un argomento esplicito TaskScheduler per evitare il valore predefinito Current , il cui comportamento è definito dal chiamante e può variare in fase di esecuzione. Current restituisce l'utilità di pianificazione associata a qualsiasi elemento Task attualmente in esecuzione in tale thread. Se non esiste un'attività di questo tipo, restituisce Default, che rappresenta il pool di thread. L'uso Current potrebbe causare deadlock o problemi di velocità di risposta dell'interfaccia utente in alcune situazioni, quando è stato progettato per creare l'attività nel pool di thread, ma attende invece di tornare al thread dell'interfaccia utente.

Per altre informazioni ed esempi dettagliati, vedere New TaskCreationOptions and TaskContinuationOptions in .NET Framework 4.5.

Come correggere le violazioni

Per correggere le violazioni, chiamare l'overload del metodo che accetta un TaskScheduler oggetto e passa Default in modo esplicito o Current per rendere chiara la finalità.

Quando eliminare gli avvisi

Questo avviso è destinato principalmente alle librerie, in cui il codice può essere eseguito in ambienti arbitrari e dove il codice non deve fare ipotesi sull'ambiente o su come il chiamante del metodo potrebbe richiamare o attendere. Potrebbe essere opportuno eliminare l'avviso per i progetti che rappresentano il codice dell'applicazione anziché il codice della libreria.

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 CA2008
// The code that's violating the rule is on this line.
#pragma warning restore CA2008

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.CA2008.severity = none

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Vedi anche