Информация об изменениях

Сообщение Re: async прерывание треда от 19.08.2021 21:56

Изменено 19.08.2021 22:01 VladD2

Re: async прерывание треда
Здравствуйте, -Cheese-, Вы писали:

C>
C>            context.SetBody();
C>            log.Info($"Body length after read: {context.body?.Length}");    
C>


Собственно твой код вызывается в том же потоке, что и PostRequest. Скорее его тупо рубят на физическом уровне. Твой метод SetBody — это обычный синхронный метод. Модификатор async не делает метод автоматически асинхронным. Скорее всего у тебя об этом ворнинги в выхлоп компилятора пишут, а ты их игнорируешь. Тебе нужно внутри цикла или перед ним вызывать нечто с await (что создаст и запустит новый поток) или самому явно позвать await Task.Run(...).

Кроме того я бы посоветовал после каждого await-выражения дописывать .ConfigureAwait(false), чтобы случайно не захватывать контекст из которого был вызов (а осуществлять продолжение всегда на свободном потоке из пула).
Re: async прерывание треда
Здравствуйте, -Cheese-, Вы писали:

C>
C>            context.SetBody();
C>            log.Info($"Body length after read: {context.body?.Length}");    
C>


Собственно твой код вызывается в том же потоке, что и PostRequest. Скорее всего его тупо рубят на физическом уровне. Твой метод SetBody — это обычный синхронный метод. Модификатор async не делает метод автоматически асинхронным. Скорее всего у тебя об этом ворнинги в выхлоп компилятора пишут, а ты их игнорируешь. Тебе нужно внутри цикла или перед ним вызывать нечто с await (что создаст и запустит новый поток) или самому явно позвать await Task.Run(...).

Кроме того я бы посоветовал после каждого await-выражения дописывать .ConfigureAwait(false), чтобы случайно не захватывать контекст из которого был вызов (а осуществлять продолжение всегда на свободном потоке из пула).