Связь между ManagedThreadID и операционной системой ThreadID

Я работаю над многопоточным приложением C # для Windows, которое делает частые вызовы в собственную dll. Это блокирующие вызовы, которые иногда могут длиться довольно долго.

В определенных ситуациях я хотел бы отменить эти вызовы блокировки некоторых рабочих потоков из основного потока. Используемый мной нативный API предоставляет функцию для этой цели:

HRESULT CancelBlockingCall(DWORD ThreadID)

Хотя документация для CancelBlockingCall () не очень понятна, я считаю, что мне нужно передать ThreadID для потока уровня ОС, который блокирует вызов. Основываясь на кодах возврата, которые я получаю от CancelBlockingCall (), я понял, что Thread.ManagedThreadID - это не то, что мне нужно. Я нашел следующее наmsdn (см. примечание):

An operating-system ThreadId has no fixed relationship to a managed thread, because an unmanaged host can control the relationship between managed and unmanaged threads. Specifically, a sophisticated host can use the CLR Hosting API to schedule many managed threads against the same operating system thread, or to move a managed thread between different operating system threads.

Означает ли это, что я не могу правильно вызвать метод CancelBlockingCall () для управляемого потока? Невозможно определить ThreadId потока на уровне ОС, в котором в данный момент выполняется управляемый поток?

Ответы на вопрос(4)

Ваш ответ на вопрос