Я запускаю задачу из основного потока (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 () не работает?
Я ожидаю, что оба будут работать в фоновом потоке.