Вызов COM-функции из C # Task блокирует поток вызывающего - PullRequest
0 голосов
/ 31 октября 2019

Я запускаю задачу из основного потока (GUI), и await для него.
Она выполняется долго, но не блокирует графический интерфейс. Хорошо.
Однако, если я вызываю функцию COM в нем, он блокирует основной поток.
Код:

class TaskCreater
{
    internal System.Threading.Tasks.Task Run()
    {
        return System.Threading.Tasks.Task.Run(() =>
        {
            System.Threading.Thread.Sleep(10000); // --> nice, no blocking GUI for 10 sec

            COMClass.LongFunction(); // -> not nice, blocks to GUI
        });
    }
}

Поток GUI вызывающего абонента:

  await _taskCreator.Run();

MSDN: Task.Run Метод: Ставит в очередь указанную работу для выполнения на ThreadPool и возвращает дескриптор задачи или задачи для этой работы.

Так почему же этот вызов COM блокирует поток вызывающей стороны?
А почему Sleep () не работает?
Я ожидаю, что оба будут работать в фоновом потоке.

...