当涉及到线程创建时,试图理解 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
只是“有时”创建一个新的线程。那么它什么时候创建一个新线程,什么时候不创建一个新线程呢?如果你正在处理 IO 完成端口,我可以看到它不必创建一个新的线程,否则我会认为它将不得不。我想我对 FromCurrentSynchronizationContext
的理解也总是有点模糊。我一直认为它本质上是 UI 线程。