С практическим асинхронным программированием столкнулся относительно недавно, и, изучая тему детальнее, назрел вопрос:
При создании задачи с помощью Task.Factory.StartNew (с параметром TaskCreationOptions.LongRunning) поток для задачи выбирается НЕ из пула.
Какой поток выбирается при создании с помощью TaskCompletionSource - из пула или не из пула?
P.S. Читал, мол, эти два способа эквивалентны... Но хочется разъяснтить очень важную деталь: какой поток выбирается при втором способе?
TaskCompletionSource(и их продолжения) выполняются в текущем потоке, потому что это просто "обертка" над таском, никакого отношения к потокам не имеющая. Она нужна, например, там, где нужно выставить "новый" асинхронный АПИ при наличии "старого" (см. ответ sp7). – andreycha Aug 07 '17 at 09:52