Разница между TPL и async/await (Обработка потоков)

Попытка понять разницу между TPL и async/await, когда дело доходит до создания потока.

Я считаю, что TPL(TaskFactory.StartNew)работает аналогично ThreadPool.QueueUserWorkItemв том смысле, что ставит в очередь работу над потоком в пуле потоков. Это, конечно, если вы не используете TaskCreationOptions.LongRunning, который создает новый поток.

Я думал, что async/ awaitбудут работать одинаково, поэтому по существу:

TPL:

Factory.StartNew( () => DoSomeAsyncWork() )
.ContinueWith( 
    (antecedent) => {
        DoSomeWorkAfter(); 
    },TaskScheduler.FromCurrentSynchronizationContext());

Async/Await:

await DoSomeAsyncWork();  
DoSomeWorkAfter();

будут идентичными. Из того, что я читал, кажется, что async/awaitтолько «иногда» создает новый поток. Итак, когда он создает новый поток, а когда не создает новый поток? Если бы вы имели дело с портами завершения ввода-вывода, я вижу, что не нужно создавать новый поток, но в противном случае я бы подумал, что это необходимо. Думаю, мое понимание FromCurrentSynchronizationContextтоже всегда было немного нечетким. Я всегда думал, что это, по сути, поток пользовательского интерфейса.

61
задан Francesco B. 6 April 2018 в 12:15
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: