如果我要构建一个库,我可能会有一个静态函数,它在函数的开头执行Thread.BeginThreadAffinity()
,在函数的结尾或者终结函数中执行Thread.EndThreadAffinity()
,因为我想强制执行托管到OS(本机)线程的一对一映射:
public static void DoSomething()
{
Thread.BeginThreadAffinity()
// Do something, like a few P/Invokes that would require me to have thread affinity.
Thread.EndThreadAffinity()
}
问题是:如果调用者在调用DoSomething()
之前已经在其线程上具有线程关联,我可能想检查线程关联是否已经在当前线程上,以便在我的函数的终结器中,我没有结束调用者的线程亲和力。那么,有没有办法检查调用线程是否启用了关联?如果没有,我可能必须为每次调用此静态函数生成一个新线程并等待AutoResetEvent。