当涉及到线程创建时,试图理解 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 线程。