Thread.BeginThreadAffinity Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Уведомляет узел о том, что управляемый код будет выполнять инструкции, зависящие от удостоверения текущего потока физической операционной системы.
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 ()
- Атрибуты
Исключения
Вызывающий объект не имеет требуемого разрешения.
Примеры
В следующем примере показано использование BeginThreadAffinity и EndThreadAffinity методов для уведомления узла о том, что блок кода зависит от удостоверения потока физической операционной системы.
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
Комментарии
Некоторые узлы среды CLR, такие как Microsoft SQL Server 2005, предоставляют собственное управление потоками. Узел, предоставляющий собственное управление потоками, может переместить задачу выполнения из одного потока физической операционной системы в другой в любое время. Большинство задач не влияют на это переключение. Однако некоторые задачи имеют сходство потоков - то есть они зависят от удостоверения физического потока операционной системы. Эти задачи должны сообщить узлу при выполнении кода, который не должен быть переключен.
Например, если приложение вызывает системный API для получения блокировки операционной системы с сходством потоков, таких как CRITICAL_SECTION Win32, необходимо вызвать BeginThreadAffinity перед получением блокировки и EndThreadAffinity после освобождения блокировки.
Использование этого метода в коде, работающем в SQL Server 2005 г., требует выполнения кода на самом высоком уровне защиты узла.