Прочитать на английском

Поделиться через


Thread.BeginThreadAffinity Метод

Определение

Уведомляет узел, что управляемый код близок к выполнению инструкций, зависящих от идентификации текущего потока операционной системы.

public static void BeginThreadAffinity();
[System.Security.SecurityCritical]
public static void 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.
    }
}

Комментарии

Некоторые узлы среды CLR, например Майкрософт SQL Server 2005, обеспечивают собственное управление потоками. Узел, предоставляющий собственное управление потоками, может в любое время переместить выполняющуюся задачу из одного потока физической операционной системы в другой. Это переключение не влияет на большинство задач. Однако некоторые задачи имеют сходство потоков, т. е. зависят от идентификатора физического потока операционной системы. Эти задачи должны информировать ведущего при выполнении кода, который не следует переключать.

Например, если приложение вызывает системный API для получения блокировки операционной системы, которая имеет сходство потоков, например CRITICAL_SECTION Win32, необходимо вызвать BeginThreadAffinity перед получением блокировки и EndThreadAffinity после снятия блокировки.

Для использования этого метода в коде, который выполняется в SQL Server 2005, код должен выполняться на самом высоком уровне защиты узла.

Применяется к

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

См. также раздел