Така, едно по едно:
Ако създам нова нишка с Thread класа, тази нишка от ThreadPool-а ли се взима или се създава нова?
ThreadPool прави точно каквото показва и името му, съхранява нишки. Когато използваш Thread класа, създаваш нов Thread(нишка), който няма общо с ThreadPool.
В MSDN пише следното : “представлява асихнронна операция“, но създаването на нишка и ползването на асинхронни операции са различни неща, нали?
Вярно е това. Правенето на асинхронна операция не значи създаване на нова нишка и работа с нея. Означава да работиш паралелно. Асинхронните операции не изискват допълнителни нишки, те са „природно“ асинхронни още на ниво операционна система.
Като ползвам Task създавам асинхронна операция или нова нишка?
Може да направиш и двете:
- Promise-style tasks- те вървят заедно с async-await операторите. Представляват асинхронни операции, които не изискват използване на нишки. Пример за това са Stream и HttpClient класовете. Повечето класове, които правят операции, обвързани с I/O, използват този тип Task
- Използване на Task.Run или Task.Factory.StartNew. Това ще вземе нишка от ThreadPool-а и ще изпълни подадения делегат, освен ако не му кажеш изрично да създаде нова нишка чрез TaskCreationOptions.LongRunning.
И кога трябва да ползвам async/await?
async/await вървят с всичко, което може да се изчаква(awaitable). Такъв клас е всеки, който има GetAwaiter метод, който връща тип, имплементиращ интерфейса INotifyCompletion или IcriticalNotifyCompletion. Можеш да разровиш повече тук:
msdn.microsoft.com/en-us/library/hh191443.aspx