Skip to content

karzhenkov/TaskYieldTest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Recursion

"Цепочка" задач, создаваемых вызовом асинхронной функции. Каждая задача ждёт (await) вызова TaskCompletionSource.SetResult предыдущей задачей.

Возобновление выполнения после await происходит внутри вызова SetResult, что приводит к эффекту рекурсии. Использование await Task.Yield() позволяет устранить этот эффект.

WpfEventHandler

Программа демонстрирует влияние await Task.Yield() на последовательность выполнения асинхронного обработчика нажатия кнопки.

MultiAwait

Несколько задач, создаваемых вызовом асинхронной функции, ждут вызова SetResult одного объекта TaskCompletionSource.

Возобновление выполнения всех задач происходит последовательно внутри вызова SetResult (вместо параллельного выполнения задач в пуле потоков).

При использовании await Task.Yield() "параллельность" восстанавливается. Однако, если увеличить количество задач, то не все они разблокируются одновременно. Возобновление после await Task.Yield() может происходить с существенной задержкой.

About

Исследование поведения TaskCompletionSource.SetResult и Task.Yield

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages