вызов функции asyn c из. обычай. нить в c# - PullRequest
0 голосов
/ 19 января 2020

Я работаю над старым кодом, который выполняется в пользовательском фоновом потоке. этот поток использует класс потока и передает ему делегат потока, то есть действие.

_thread = new Thread(() => processData());

Мне нужно вызвать некоторые новые функции, которые возвращают задачу, поэтому я просто делаю

myfunc().GetAwaiter().GetResult();

или есть ли другой способ? потому что, поскольку это пользовательский поток, я не думаю, что он действительно что-то делает в этот раз. как я могу позвонить асин c жду от. пользовательский поток, чтобы он использовался правильно?

1 Ответ

0 голосов
/ 20 января 2020

Если вы хотите продолжить использовать свой пользовательский Thread, то да, он должен блокировать асинхронный код. GetAwaiter().GetResult(), вероятно, является лучшим выбором для этого.

или есть другой способ?

Да. Если вы можете заменить свой пользовательский Thread потоком пула потоков, тогда вы можете использовать Task.Run вместо Thread, а затем вы можете использовать более естественный await вместо GetAwaiter().GetResult(). Большинство пользовательских потоков можно заменить потоками пула потоков, но это не всегда так.

...