Thread.EndThreadAffinity Metodo

Definizione

Notifica a un host che il codice gestito ha completato l'esecuzione di istruzioni che dipendono dall'identità del thread del sistema operativo fisico corrente.

public:
 static void EndThreadAffinity();
public static void EndThreadAffinity();
[System.Security.SecurityCritical]
public static void EndThreadAffinity();
static member EndThreadAffinity : unit -> unit
[<System.Security.SecurityCritical>]
static member EndThreadAffinity : unit -> unit
Public Shared Sub EndThreadAffinity ()
Attributi

Eccezioni

Il chiamante non dispone dell'autorizzazione richiesta.

Esempio

Nell'esempio seguente viene illustrato l'uso dei BeginThreadAffinity metodi e EndThreadAffinity per notificare a un host che un blocco di codice dipende dall'identità di un thread del sistema operativo fisico.

using System.Threading;

public class MyUtility
{
    public void PerformTask()
    {
        // Code that does not have thread affinity goes here.
        //
        Thread.BeginThreadAffinity();
        //
        // Code that has thread affinity goes here.
        //
        Thread.EndThreadAffinity();
        //
        // More code that does not have thread affinity.
    }
}
open System.Threading

let performTask () =
    // Code that does not have thread affinity goes here.
    //
    Thread.BeginThreadAffinity()
    //
    // Code that has thread affinity goes here.
    //
    Thread.EndThreadAffinity()
    //
    // More code that does not have thread affinity.
Imports System.Threading
Imports System.Security.Permissions

<SecurityPermission(SecurityAction.Demand, Flags:=SecurityPermissionFlag.ControlThread)> _
Friend Class MyUtility
    <SecurityPermission(SecurityAction.Demand, Flags:=SecurityPermissionFlag.ControlThread)> _
    Public Sub PerformTask() 
        ' Code that does not have thread affinity goes here.
        '
        Thread.BeginThreadAffinity()
        '
        ' Code that has thread affinity goes here.
        '
        Thread.EndThreadAffinity()
        '
        ' More code that does not have thread affinity.
    End Sub
End Class

Commenti

Alcuni host di Common Language Runtime, ad esempio Microsoft SQL Server 2005, forniscono la propria gestione dei thread. Un host che fornisce la propria gestione thread può spostare un'attività in esecuzione da un thread del sistema operativo fisico a un altro in qualsiasi momento. La maggior parte delle attività non è interessata da questa commutazione. Tuttavia, alcune attività hanno affinità di thread, ovvero dipendono dall'identità di un thread del sistema operativo fisico. Queste attività devono informare l'host quando eseguono codice che non devono essere cambiate.

Ad esempio, se l'applicazione chiama un'API di sistema per acquisire un blocco del sistema operativo con affinità di thread, ad esempio un CRITICAL_SECTION Win32, è necessario chiamare BeginThreadAffinity prima di acquisire il blocco e EndThreadAffinity dopo aver rilasciato il blocco.

L'uso di questo metodo nel codice eseguito in SQL Server 2005 richiede l'esecuzione del codice al livello di protezione host più elevato.

Si applica a

Vedi anche