Я пытаюсь понять точное поведение async/await и испытываю небольшую неприятность, обворачивая его вокруг себя.Поведение async ждет с новыми потоками
Рассмотрим следующий пример:
public async void StartThread()
{
while(true){
SomeOtherClass.SomeSynchronousStuff();
var something = await SomeOtherClass.SomeOtherAsyncMethod();
}
}
public void ConstructorForThisClass()
{
Thread thread = new Thread(StartThread);
thread.Start();
}
Мое понимание асинхронном/ожидают, что то, что происходит под одеялом, что компилятор, по сути превращая ваш код в кучу обратных вызовов и сохранения состояния объектов для каждого из них ,
Итак, в соответствии с этим, мои вопросы:
- Будет ли вновь созданный поток будет запущен асинхронно? Значит, пока поток ждет
SomeOtherAsyncMethod
, будет ли он освобожден для работы над другой работой? - Если предыдущее верно, будет ли поток просто заканчиваться, а поток пула потоков займет свое место, когда возвращается
SomeOtherAsyncMethod
? - Как я могу сделать функцию
StartThread
в потоке пула потоков, а не в управляемом потоке? - Когда ожидаемый метод возвращается к вызывающему абоненту, он вынужден возобновить поток, который вызывает его, или может ли любая свободная нить занять его место?