Thread.BeginThreadAffinity Method

Note: This method is new in the .NET Framework version 2.0.

Notifies a host that managed code is about to execute instructions that depend on the identity of the current physical operating system thread.

Namespace: System.Threading
Assembly: mscorlib (in mscorlib.dll)

public static void BeginThreadAffinity ()
public static void BeginThreadAffinity ()
public static function BeginThreadAffinity ()

Exception typeCondition


The caller does not have the required permission.

Some hosts of the Common Language Runtime, such as Microsoft® SQL Server "Yukon", provide their own thread management. A host that provides its own thread management can move an executing task from one physical operating system thread to another at any time. Most tasks are not affected by this switching. However, some tasks have thread affinity - that is, they depend on the identity of a physical operating system thread. These tasks must inform the host when they execute code that should not be switched.

For example, if your application calls a system API to acquire an operating system lock that has thread affinity, such as a Win32 CRITICAL_SECTION, you must call BeginThreadAffinity before acquiring the lock, and EndThreadAffinity after releasing the lock.

You must also call BeginThreadAffinity before blocking on any .NET Framework type that inherits from WaitHandle, because these types depend on operating system objects.

Using this method in code that runs under SQL Server "Yukon" requires the code to be run at the highest host protection level.

The following example demonstrates the use of the BeginThreadAffinity and EndThreadAffinity methods to notify a host that a block of code depends on the identity of a physical operating system thread.

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.
        // Code that has thread affinity goes here.
        // More code that does not have thread affinity.

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.

.NET Framework

Supported in: 2.0