Thread.BeginThreadAffinity Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Notifica a un host che il codice gestito sta per eseguire istruzioni che dipendono dall'identità del thread fisico corrente del sistema operativo.
public:
static void BeginThreadAffinity();
public static void BeginThreadAffinity ();
[System.Security.SecurityCritical]
public static void BeginThreadAffinity ();
static member BeginThreadAffinity : unit -> unit
[<System.Security.SecurityCritical>]
static member BeginThreadAffinity : unit -> unit
Public Shared Sub BeginThreadAffinity ()
- Attributi
Eccezioni
Il chiamante non dispone dell'autorizzazione richiesta.
Esempio
Nell'esempio seguente viene illustrato l'uso dei metodi e per notificare a un host che un blocco di codice dipende dall'identità BeginThreadAffinity di un thread del sistema operativo EndThreadAffinity fisico.
using namespace System::Threading;
using namespace System::Security::Permissions;
public ref class MyUtility
{
public:
[SecurityPermissionAttribute(SecurityAction::Demand, ControlThread=true)]
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.
}
};
using System.Threading;
using System.Security.Permissions;
[SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlThread)]
public class MyUtility
{
[SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlThread)]
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.
}
}
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 gestione dei thread. Un host che fornisce la propria gestione dei 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, che dipendono dall'identità di un thread del sistema operativo fisico. Queste attività devono informare l'host quando eseguono codice che non deve essere commutato.
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 prima di acquisire il blocco e dopo il rilascio BeginThreadAffinity EndThreadAffinity del blocco.
L'uso di questo metodo nel codice eseguito SQL Server 2005 richiede che il codice venga eseguito al livello di protezione host più alto.