Compartir a través de


Thread.BeginThreadAffinity Método

Definición

Notifica a un host que el código administrado está a punto de ejecutar instrucciones que dependen de la identidad del subproceso del sistema operativo físico actual.

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 ()
Atributos

Excepciones

El llamador no dispone del permiso requerido.

Ejemplos

En el ejemplo siguiente se muestra el uso de los BeginThreadAffinity métodos y EndThreadAffinity para notificar a un host que un bloque de código depende de la identidad de un subproceso de sistema operativo físico.

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;

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

Comentarios

Algunos hosts de Common Language Runtime, como Microsoft SQL Server 2005, proporcionan su propia administración de subprocesos. Un host que proporciona su propia administración de subprocesos puede mover una tarea en ejecución de un subproceso de sistema operativo físico a otro en cualquier momento. La mayoría de las tareas no se ven afectadas por este cambio. Sin embargo, algunas tareas tienen afinidad de subproceso; es decir, dependen de la identidad de un subproceso de sistema operativo físico. Estas tareas deben informar al host cuando ejecutan código que no debe cambiarse.

Por ejemplo, si la aplicación llama a una API del sistema para adquirir un bloqueo del sistema operativo que tenga afinidad de subproceso, como un CRITICAL_SECTION Win32, debe llamar BeginThreadAffinity antes de adquirir el bloqueo y EndThreadAffinity después de liberar el bloqueo.

El uso de este método en el código que se ejecuta en SQL Server 2005 requiere que el código se ejecute en el nivel de protección de host más alto.

Se aplica a

Consulte también