Formazione
Modulo
Sicurezza dei valori Null in C # - Training
Informazioni sulle procedure di codifica per impedire l'occorrenza di NullReferenceException.
Questo browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
Le API Thread.Abort sono obsolete. I progetti destinati a .NET 5 o una versione successiva visualizzeranno un avviso SYSLIB0006
in fase di compilazione se questi metodi vengono chiamati.
In precedenza, le chiamate a Thread.Abort non generavano avvisi in fase di compilazione, ma il metodo generava un'eccezione PlatformNotSupportedException in fase di esecuzione.
A partire da .NET 5, Thread.Abort viene contrassegnato come obsoleto come avviso. La chiamata a questo metodo genera un avviso del compilatore SYSLIB0006
. L'implementazione del metodo è invariata e continua a generare un'eccezione PlatformNotSupportedException.
Dato che Thread.Abort genera sempre un'eccezione PlatformNotSupportedException in tutte le implementazioni .NET ad eccezione di .NET Framework, ObsoleteAttribute è stato aggiunto al metodo per attirare l'attenzione sulle posizioni in cui viene chiamato.
Quando si chiama Thread.Abort per interrompere un thread diverso dal thread corrente, non si sa quale codice è stato eseguito o non è riuscito a eseguire quando viene generato ThreadAbortException. Non è inoltre possibile essere certi dello stato dell'applicazione o di qualsiasi applicazione e stato utente responsabile del mantenimento. Ad esempio, la chiamata Thread.Abort può impedire l'esecuzione di costruttori statici o il rilascio di risorse gestite o non gestite. Per questo motivo, Thread.Abort genera sempre un'eccezione PlatformNotSupportedException su .NET Core e .NET 5+.
5.0
Usare un oggetto CancellationToken per interrompere l'elaborazione di un'unità di lavoro anziché chiamare Thread.Abort. Nell'esempio riportato di seguito viene illustrato l'utilizzo di CancellationToken.
void ProcessPendingWorkItemsNew(CancellationToken cancellationToken)
{
if (QueryIsMoreWorkPending())
{
// If the CancellationToken is marked as "needs to cancel",
// this will throw the appropriate exception.
cancellationToken.ThrowIfCancellationRequested();
WorkItem work = DequeueWorkItem();
ProcessWorkItem(work);
}
}
Per altre informazioni, vedere Annullamento in thread gestiti.
Per eliminare l'avviso in fase di compilazione, eliminare il codice di avviso SYSLIB0006
. Il codice di avviso è specifico di Thread.Abort e non elimina altri avvisi obsoleti nel codice. È tuttavia consigliabile rimuovere le chiamate a Thread.Abort anziché eliminare l'avviso.
void MyMethod()
{
#pragma warning disable SYSLIB0006
Thread.CurrentThread.Abort();
#pragma warning restore SYSLIB0006
}
È anche possibile eliminare l'avviso nel file di progetto.
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<!-- Disable "Thread.Abort is obsolete" warnings for entire project. -->
<NoWarn>$(NoWarn);SYSLIB0006</NoWarn>
</PropertyGroup>
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback:
Formazione
Modulo
Sicurezza dei valori Null in C # - Training
Informazioni sulle procedure di codifica per impedire l'occorrenza di NullReferenceException.