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

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

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

HRESULT CancelBlockingCall(DWORD ThreadID)

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

ThreadId операционной системы не имеет фиксированной связи с управляемым потоком, поскольку неуправляемый хост может контролировать отношения между управляемыми и неуправляемыми потоками. В частности, сложный хост может использовать API-интерфейс хостинга CLR для планирования многих управляемых потоков в одном потоке операционной системы или для перемещения управляемого потока между различными потоками операционной системы.

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

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

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