Попытка понять разницу между TPL и async/await, когда дело доходит до создания потоков.
Я считаю, что TPL (TaskFactory.Startnew) работает подобно ThreadPool.QueueUserWorkItem тем, что он ставит в очередь работу над потоком в пуле потоков. Конечно, если вы не используете TaskCreationOptions.LongRunning, которые создают новый поток.
Я думал, что async/await будет работать так же существенно:
TPL:
Factory.StartNew( () => DoSomeAsyncWork() )
.ContinueWith(
(antecedent) => {
DoSomeWorkAfter();
},TaskScheduler.FromCurrentSynchronizationContext());
Асинхронный/Await:
await DoSomeAsyncWork();
DoSomeWorkAfter();
будет идентичным. Из того, что я читал, кажется, что async/await только "иногда" создает новый поток. Итак, когда он создает новый поток и когда он не создает новый поток? Если вы имели дело с портами ввода-вывода IO, я вижу, что вам не нужно создавать новый поток, но в противном случае я бы подумал, что это нужно. Я думаю, что мое понимание FromCurrentSynchronizationContext всегда было немного нечетким. Я всегда понимал, что это был, по сути, поток пользовательского интерфейса.