แแแฅแแแงแแแ แแ แแแแแแแฃแ แกแขแแขแแแก แฐแแแ แแ, แ แแแแแก แแแ แแแแแ แแแแแแแกแแแฃแแแ แแแ แแแ แแขแแฃแแจแ
แ แแฆแแชแแก แแกแแแฅแ แแแฃแแแ แแแแแแแแแก แแฃแชแแแแแแแแ, แจแแแแแแก แแแแแแแแแก แแแ แแจแ แแฅ แแ แแฎแแ, แแ แแแแ แกแแแฃแจแแแก แแแงแแคแ แแแก แจแแแกแ แฃแแแแแ แ แแแแแแแแ แแ แแแฃแแแ, แแ แกแแแแแแ แแแแแแฃแขแแ แแแแก แแแกแแแแแแ. แแแแ แแแกแแแแกแแแ แแ แแแ แแก แกแแญแแ แแแแ แซแแแแแ แฎแแแจแแกแแฎแแแ แแแฎแแ. แแฎแแ, 2019 แฌแแแก, แแ แกแขแแขแแแก แแแแญแแแ แแแแขแแแแ 8-แแแ แแแแแแ Intel Core แแ แแชแแกแแ แแ, แ แแแแแแแช แแกแแ แแแขแ แแ แแชแแกแ แแแแแแแแ แแแแก แแแ แแแแแฃแ แแ แแ แแแแแ แฃแคแ แ แแแขแ แแแแ. แแฎแแแก แแ แแก แชแแขแ แแแคแฃแญแแแฃแแ แขแแแแคแแแ, แ แแแแแแแแ แฌแแแก แฌแแ แแแงแแแ, แแฅแแก 8 แแแ แแแแแแ แแ แแชแแกแแ แ. แแแแแขแฃแ แ แ แแกแฃแ แกแแแ แกแแแกแแ แกแขแแขแแแแแแ แแ แแแแแแแแแ, แกแแแแช แแแแ แแแขแแ แแแ แแฆแคแ แแแแแแแแฃแแแ แแ แแแ แฌแแแแแแแแแ แคแแแแแแแ แกแแแ แขแคแแแแแแ, แ แแแแแแแช แแฆแญแฃแ แแแแแ 16 แแแ แแแแแแ แแ แแชแแกแแ แแแแ. MS Azure แแแแแแแแแ แแแ แขแฃแแแฃแ แแแแฅแแแแก 20 แแแ แแแแแแ แแ แแชแแกแแ แแ แแ 128 TB แแแแ แแขแแฃแแ แแแฎแกแแแ แแแแ 2 แแแแแ แแ แแแแแแ แคแแกแแ/แกแแแแจแ. แกแแแฌแฃแฎแแ แแ, แจแแฃแซแแแแแแแ แแแฅแกแแแฃแแแก แแแแแแแแ แแ แแ แซแแแแก แแแแแงแแแแแ แซแแคแแแแก แฃแ แแแแ แแฅแแแแแแแก แแแ แแแแก แแแ แแจแ.
แขแแ แแแแแแแแแ
แแ แแชแแกแ - OS แแแแแฅแขแ, แแแแแแ แแแฃแแ แแแกแแแแ แแแแแก แกแแแ แชแ, แจแแแชแแแก แซแแคแแแก.
แซแแคแ - OS แแแแแฅแขแ, แจแแกแ แฃแแแแแก แฃแแชแแ แแกแ แแ แแแฃแแ, แแ แแชแแกแแก แแแฌแแแ, แซแแคแแแ แแแแแ แแแแ แแแฎแกแแแ แแแแก แแ แกแฎแแ แ แแกแฃแ แกแแแก แแ แแแแแแแแแ แแ แแชแแกแแก แคแแ แแแแแจแ.
แแ แแแแแแแแแกแแฎแฃแ แแแ - OS แแแแกแแแ, แ แแแแแแแแ แแ แแชแแกแแก แแ แแแ แแฃแแแ แแแจแแแแแก แจแแกแแซแแแแแแแ
แแ แแแแแแแ แแแแแแ - แแ แแชแแกแแ แแก แแแแกแแแ, แแแแแชแแแแ แแแแฃแจแแแแแแกแแแแก แ แแแแแแแแ แแแ แแแแก แแแแแงแแแแแแก แจแแกแแซแแแแแแแ
แแ แแแแแแ แแชแแกแแ แแแ - แแแแแแฃแขแแ แแก แแแแกแแแ, แคแแแแแฃแ แแ แ แแแแแแแแ แแ แแชแแกแแ แแแ แแ แแแ แแฃแแแ แแฃแจแแแแแก แจแแกแแซแแแแแแแ
แแ แแแแแซแแคแแแแ โ แแ แแชแแกแแก แแแแกแแแ, แแแแแชแแแแ แแแแฃแจแแแแแแก แ แแแแแแแแ แซแแคแก แจแแ แแก แแแแแฌแแแแแแก แจแแกแแซแแแแแแแ.
แแแ แแแแแแแแ - แคแแแแแฃแ แแ แแ แแแ แแฃแแแ แ แแแแแแแแ แแแฅแแแแแแแก แจแแกแ แฃแแแแ แแ แแแก แแ แแแฃแแแ
แแกแแแฅแ แแแฃแแแแ - แแแแ แแชแแแก แจแแกแ แฃแแแแ แแ แแแแฃแจแแแแแแก แแแกแ แฃแแแแแแแ แแแแแแแแแก แแแ แแจแ; แจแแกแ แฃแแแแแก แจแแแแแ แจแแแซแแแแ แแแแแแแแแแแ แแแแฃแจแแแแแก.
แแแขแแคแแ แ
แงแแแแ แแแแแแ แขแแแ แแ แแ แแก แแแ แแ แแ แแแแแแ แแก แแแแแขแแแแแ แแฎแกแแ แกแญแแ แแแแ, แแแแขแแ แแคแแชแแแแฃแ แแ แจแแแแฆแแแฃแ แขแแ แแแแแแแแแแก แแแแแแแขแแ แแแขแแคแแ แแก แกแแฃแแแแก แแแแแแแแแแก แจแแกแแฎแแ. แแ แแแขแแคแแ แแจแ แกแแฃแแแแก แแแแแแแแแ แแ แแชแแกแแ.
แแแแแ แกแแฃแแแแก แแแแแแแแแแกแแก แแ (CPU) แแแแแแแแ แกแแแแแ แแฃแแแจแ (แแแแแแฃแขแแ แ). 2 แฎแแแ แแแฅแแก (แแแ แแแแ). แกแแแแแ แแฃแแแจแ แแ แแก แ แแแแแแแแ แแแฌแงแแแแแแแ (IO): แฆแฃแแแแ, แฅแแแแ, แขแแกแขแแ แ, แแแชแแแแ แ. แแแแก แแ แแแ, แขแแคแแก แแแกแฎแแ แแ แแแชแฎแแแแแแก แแ แแแแแแแแ แแแแก (แแกแแแฅแ แแแฃแแแ, Non-Blocking-IO-Wait), แแแแ แชแฎแแแก แแแแแแแฆแแ แแแชแแแ แแแแ แแ แแขแแฎแแ แแแคแจแแ, แจแแแแแ แชแแแ แฎแแแแ แแแฅแแ (แแแแ #1), แแ แแแแ แ (แแแแ #2) แคแแ แคแแขแแก แแแญแแ แ (แแแแแแ แแแฃแแ แ แแกแฃแ แกแ). แแฎแแ แแแแแ แฉแแแ แแ แฅแแแแ, แแแแ แแ แแ แแแฅแแก แกแแแแแ แแกแ แฎแแแแแ (แซแแคแแก แจแแแจแแแ) แแ แแ แแแก แแแแแแแแแแแจแ แขแแคแ แแแแแ (แจแแแแแแก แแแแฃแจแแแแแ) แ แแแแแจแแช แแแกแฎแแ แแแฅแแแคแแแก. แฅแแแแก แฎแแแก แแแแแแ, แแ แแแ แแ แกแฃแแแแฃแ แแ แแฃแงแฃแ แแ แแแกแจแ แฌแงแแแก แแฃแฆแแแก (แแแแแแแแ-IO-แแแแแแแแ), แแฃแแชแ แแ แฎแแแก แแแแแแแแแแแจแ แแแก แจแแแซแแ แแแแ แแชแฎแ แแแคแจแ, แกแแแแช แแแแแขแก แแแฅแแแคแแ.
แแแแแขแ แแแแแแแแแ แแฎแแแแ 2 แฎแแแแ แแ แแแขแ แแ แแแฅแแก, แแแแ แแ แแแแแแ แแฃแแแ แแแแแขแแก แแแฅแแแคแแก แแแแแแขแจแ แแ แแแ แแฃแแแ 3 แแแแ แแชแแ แแแฎแแ: แแแแแขแแก แแแฅแแแคแ, แแแคแจแแก แแแญแแ แ, แขแแคแแก แแแชแฎแแแแแ. CPU แแ แแก แแแแแแฃแขแแ แแก แงแแแแแแ แกแฌแ แแคแ แแแฌแแแ, IO แแ แแก แแก, แ แแช แงแแแแแแ แฎแจแแ แแ แแแแแแแก แงแแแแแคแแ แก, แแแแขแแ แฎแจแแ แแ แแคแแฅแขแฃแ แ แแแแแกแแแแแแ CPU-แก แ แแฆแแชแแ แแแแแแแแ IO-แแแ แแแแแชแแแแแแก แแแฆแแแแกแแก.
แแแขแแคแแ แแก แแแแ แซแแแแแ:
- แแฃ แแแแแขแแก แแแแแแแแแแก แแ แแชแแกแจแ แขแแแกแแชแแแแก แแแแแชแแแแกแแช แแชแแแแแแแ, แแก แแฃแแขแแขแแกแแแแแแก แแแแแแแแ แแฅแแแแแแ. แแแแจแแแแแแแแแ แแแฃแแแกแ: แแแแแแฃแขแแ แแแ แแแแจแ แแแแ แแ แฃแแแแแกแแแ แแ แแแ แแแแ แ แแแแแแแแแแ.
- แกแแแแแ แแฃแแ แ แแแแแแแแ แจแแค-แแแแ แแฃแแแ, แแแแแแแแแ แ แแกแขแแ แแแจแ - แแ แแแแแแแ แแแแแแ แแแแแแฃแขแแ แ.
- แแแแ แ แ แแกแขแแ แแแ แแแแแแก แแแ แขแจแ แกแแแแญแ แ แชแแแขแ แจแ - แแแแแชแแแแ แชแแแขแ แ
.NET Tools
.NET แแแ แแแ แแฃแจแแแแก แซแแคแแแแแ, แแกแแแ แ แแแแ แช แแแแ แกแฎแแ แ แแแแจแ. แงแแแแแ แแฎแแแ แแแ แกแแแ, แแก แจแแแแแฅแแก แฃแคแ แ แแ แฃแคแ แ แแฎแแ แแแกแขแ แฃแแแแขแแแก แแแแแแ แแฃแจแแแแแกแแแแก, แแแกแขแ แแฅแชแแแก แแฎแแ แคแแแแแก OS แซแแคแแแแ. แแแกแขแ แแฅแชแแแแแก แแแแกแขแ แฃแฅแชแแแกแแแ แแฃแจแแแแแกแแก, แคแ แแแแฃแ แแก แแแแแแแแแ แแแ แแงแแแแแแ แแแแแแแแก, แ แแแแแแช แขแแแแแก แจแแกแแซแแแแแแแแก, แแแฆแแแ แแแแแก แแแกแขแ แแฅแชแแแก แแแแแงแแแแแแกแแก, แแ แแ แแ แแแขแ แแแแแก แฅแแแแแ แฉแแกแแแ. แงแแแแแแ แฎแจแแ แแ แแก แแ แแ แแก แกแแญแแ แ, แกแแแแแแแแแแจแ แแก แฎแกแแแก แแแ แก แแแคแแ แคแแฎแจแ แกแ แแแแกแแแแก, แแแแ แแ แแแแฏแแ , แแจแแแแ แจแแแแฎแแแแแแจแ, แแก แจแแแซแแแแ แแงแแก แแ แแแแแ แแ แแแ แแ แแแแแแแก แแแแแกแแญแ แแแแ, แ แแแแแแช แแ แแ แแก แแแแแแ แแแฃแแ แแแกแขแ แแฅแชแแแก แแแแแแแแแแ แแแแแแ. .
แแแกแขแ แฃแแแแขแแแจแ แแแฃแแแกแฎแแแ แ แแแแ แช แแแแแแแชแแแก แแ แแแ แแแแ แแแแก แแแขแแ แคแแแกแแแก (API), แ แแแแแแแช แแแฌแแแแแฃแแแ แคแ แแแแแแแ แแ แแแกแแแ แแฎแแ แแก แแแแแขแแแแ, แแกแแแ แแแแแแแ แแ แแแ แแแฃแแ แแแแแฌแงแแแขแแแแแแแ, แ แแแแแแแช แแแแ แขแแแแแก แแ แแแแ แฎแ แแฎแแแแ แแแแแแ แแแแแแจแแ แแแฃแแ แแแแแกแแแแ แ แแ แแแแแแแก แซแแแแแก.
แแแแแก แแแฌแงแแแ
Thread แแแแกแ แแ แแก แงแแแแแแ แซแแ แแแแแ แแแแกแ .NET-แจแ แแ แแแแแแแ แแฃแจแแแแแกแแแแก. แแแแกแขแ แฃแฅแขแแ แ แแฆแแแก แแ แ-แแ แแก แแ แ แแแแแแแขแแแแ:
- ThreadStart - แแแ แแแแขแ แแแแก แแแ แแจแ
- ParametrizedThreadStart - แขแแแแก แแแแแฅแขแแก แแ แแ แแแ แแแแขแ แแ.
แแแแแแแขแ แจแแกแ แฃแแแแแ แแฎแแแ แจแแฅแแแแ แแแแแจแ Start แแแแแแแก แแแแแซแแฎแแแแก แจแแแแแ. แแฃ ParametrizedThreadStart แขแแแแก แแแแแแแขแ แแแแแแชแ แแแแกแขแ แฃแฅแขแแ แก, แแแจแแ แแแแแฅแขแ แฃแแแ แแแแแแชแแก Start แแแแแแก. แแก แแแฅแแแแแแ แกแแญแแ แแ แแแแแกแแแแ แ แแแแแแแแ แแแ แแแคแแ แแแชแแแก แแแแแแจแ แแแแแกแแขแแแแ. แแฆแกแแแแจแแแแแ, แ แแ แแแแแก แจแแฅแแแ แซแแแ แแแฆแแ แแแฃแแ แแแแ แแชแแแ แแ แแแแแ แซแแคแ แแซแแแ แแแแแฅแขแแ, แแฃแแแแช แแแแขแแ, แ แแ แแก 1 แแ แแแฎแกแแแ แแแแก แแแแแงแแคแก แกแขแแแแ แแ แแแแแฎแแแก OS API-แกแแแ แฃแ แแแแ แแฅแแแแแแแก.
new Thread(...).Start(...);
ThreadPool แแแแกแ แฌแแ แแแแแแแแก แแฃแแแก แแแแชแแคแชแแแก. .NET-แจแ, thread pool แแ แแก แแแแแแแ แแแก แแแฌแแแ แแ Microsoft-แแก แแแแแแแแแ แแแแ แแแแ แซแแแแกแฎแแแแ แแแฎแแ แฏแแก แแแแกแแแแก, แ แแ แแแ แฌแแฃแแแแแ, แ แแ แแก แแแขแแแแแฃแ แแ แแฃแจแแแแแ แแ แแแแแคแแ แแแแ แกแชแแแแ แแแจแ.
แแแแแแ แแแแชแแคแชแแ:
แแแแแแแชแแแก แแแฌแงแแแแก แแแแแแขแแแแ แแก แฅแแแแก แ แแแแแแแแ แซแแคแก แ แแแแ แแจแ แคแแแแ แแ แแซแแแแ แแแแ แแแแแงแแแแแแก แจแแกแแซแแแแแแแแก. แแฃ แซแแคแแแ แแแแแแงแแแแแ แฎแจแแ แแ แแ แแแแ แ แแแแแแแแแ, แแฃแแ แคแแ แแแแแแแ แแแแแแแขแแก แแแแฎแแแแแแแแแแแก แแแกแแแแแงแแคแแแแแแแ. แ แแแแกแแช แแฃแแจแ แกแแญแแ แ แแ แแก แแ แแ แแก แแแแแกแฃแคแแแ แซแแคแแแ, แแก แแ แแแแแแแแแ แแ แ-แแ แแ แซแแคแแแแก แแแแ แฃแแแแแก, แแ แจแแฅแแแแก แแฎแแแก. แแฅแแแแ แแแแแแแแแแ แแแแก, แ แแ แซแแคแแแแก แคแแแแ แจแแกแแแแจแแแแแ แแแแแแ แแ แแแแแแแแแแแแ แแแฅแแแแแแแกแแแแก แแ แชแฃแแแ แจแแแคแแ แแแ แแแแ แแชแแแแก, แ แแแแแแแช แแฃแจแแแแก แ แแแแ แช แกแแ แแแกแแแ แแแแแแแชแแแก แแแแแ แแฃแจแแแแแก แแแแแแแแแแแจแ.
แแฃแแแแแ แแแแแแแก แแแแแกแแงแแแแแแแ แแ แแก QueueUserWorkItem แแแแแแ, แ แแแแแแช แแฆแแแก WaitCallback แขแแแแก แแแแแแแขแก, แ แแแแแกแแช แแฅแแก แแแแแ แฎแแแแแฌแแ แ, แ แแแแ แช ParametrizedThreadStart แแ แแแกแแ แแแแแชแแแฃแแ แแแ แแแแขแ แ แแกแ แฃแแแแก แแแแแ แคแฃแแฅแชแแแก.
ThreadPool.QueueUserWorkItem(...);
แแแแแแแแ แชแแแแแแ thread pool แแแแแแ RegisterWaitForSingleObject แแแแแแงแแแแแ แแ แแแแแแแแแแก IO แแแแ แแชแแแแแก แแ แแแแแแแแแกแแแแก. แแ แแแแแแแ แแแแแชแแแฃแแ แแแแแแแขแ แแแแแแซแแฎแแแ, แ แแแแกแแช แแแแแแแ แแแแแชแแแฃแแ WaitHandle แแฅแแแแ โแแแแแจแแแแฃแแโ.
ThreadPool.RegisterWaitForSingleObject(...)
.NET-แก แแฅแแก แแแแแแแก แขแแแแแ แ แแ แแก แแแแกแฎแแแแแแแ WinForms/WPF แขแแแแแ แแแแกแแแ แแแแ, แ แแ แแแกแ แแแแแฃแจแแแแแแแ แแแแแแซแแฎแแแ แแฃแแแแแ แแฆแแแฃแ แซแแคแแ.
System.Threading.Timer
แแกแแแ แแ แกแแแแแก แกแแแแแแ แแแแแขแแแฃแ แ แแแ แแแแแแแขแแก แจแแกแแกแ แฃแแแแแแ แซแแคแแ แแแกแแแแแแแแ แแฃแแแแแ - BeginInvoke แแแแแแ.
DelegateInstance.BeginInvoke
แแแแแ แแแแแแ แแแกแแฃแแ แ แแ แคแฃแแฅแชแแแแ, แ แแแแแกแแช แจแแแซแแแแ แแฌแแแแก แแ แแแแแ แแแแแแฆแแแจแแฃแแ แแแแแแ - CreateThread from Kernel32.dll Win32 API. แแ แกแแแแแก แแแ, แแแ แ แแแแแแแแแก แแแฅแแแแแแแก แฌแงแแแแแแ, แ แแ แแแแแแซแแฎแแ แแก แคแฃแแฅแชแแ. แแกแแแ แแแ แ แแ แแฎแแแแ แแ แแฎแแ แแแแแฎแแแก แแแแแแแแ แแแแแก แแแแแก แกแแจแแแแ แแแแแแแแจแ แแ แแแขแแ แแก แแแขแแแแชแแ, แ แแแแแแแช แแฃแกแขแแ แแก แแแแแแแ, แแฆแแแแ แกแแแแฃแแแแ แ แฉแแแ แฉแแแแแแก.
Kernel32.dll CreateThread
แแแแแแแก แแแฎแแ แแ แแแแแ แแแ
แแฅแแแ แแแแ แจแแฅแแแแแ แซแแคแแแ, แแแกแแแ แแฎแแ แแก แงแแแแ แแแแแแแแแขแ แแ .NET แคแแแแ แจแแแแซแแแแ แแแฎแแ Visual Studio-แแก Threads แคแแแฏแแ แแจแ. แแ แคแแแฏแแ แแจแ แแแฉแแแแแแ แแฅแแแแ แแแแแก แแแคแแ แแแชแแ แแฎแแแแ แแแจแแ, แ แแแแกแแช แแแแแแแชแแ แแแแแ แแแแก แแ แแชแแกแจแแ แแ Break แ แแแแแจแแ. แแฅ แจแแแแซแแแแ แแแฎแแ แฎแแแฃแแแ แแแฎแแ แแแขแแก แกแแฎแแแแแ แแ แแ แแแ แแขแแขแแแ แแแแแแฃแแ แแแแแก, แแ แแแแแ แแแ แแแแแ แแแ แแแแแ แแขแฃแ แแแแแแ. Thread แแแแกแแก Priority แแแแกแแแแก แแแแแงแแแแแแ, แจแแแแซแแแแ แแแแงแแแแ แซแแคแแแแก แแ แแแ แแขแแขแ, แ แแแแแกแแช OC แแ CLR แแฆแแฅแแแแแ แ แแแแ แช แ แแแแแแแแแชแแแก แแ แแชแแกแแ แแก แแ แแแก แซแแคแแแก แจแแ แแก แแแงแแคแแกแแก.
แแแแชแแแแแแก แแแ แแแแแฃแ แ แแแแแแแแแแ
แกแแแฃแจแแ แแแ แแแแแฃแ แ แแแแแแแแแแ (TPL) แแแแแแ แแ .NET 4.0-แจแ. แแฎแแ แแก แแ แแก แแกแแแฅแ แแแแแกแแแ แแฃแจแแแแแก แกแขแแแแแ แขแฃแแ แแ แแแแแแ แ แแแกแขแ แฃแแแแขแ. แแแแแกแแแแ แ แแแแ, แ แแแแแแช แแงแแแแแก แฃแคแ แ แซแแแ แแแแแแแแก, แแแแแแแ แแแแแแแแ แแแแแ. TPL-แแก แซแแ แแแแแ แแ แแแฃแแแ Task แแแแกแ System.Threading.Tasks แกแแฎแแแแแแก แกแแแ แชแแแแ. แแแแชแแแ แแ แแก แแแกแขแ แแฅแชแแ แซแแคแแ. C# แแแแก แแฎแแแ แแแ แกแแแ, แฉแแแ แแแแแฆแแ Tasks-แแแ แแฃแจแแแแแก แแแแแแแขแฃแ แ แแแ - async/wait แแแแ แแขแแ แแแ. แแ แชแแแแแแแ แจแแกแแซแแแแแแ แแแฎแแแ แแกแแแฅแ แแแฃแแ แแแแแก แแแฌแแ แ, แแแแฅแแก แแก แแแ แขแแแ แแ แกแแแฅแ แแแฃแแ แงแแคแแแแงแ, แแแแ แแ แกแแจแฃแแแแแ แแแกแชแ แแแแแแแแแแก, แ แแแแแแกแแช แแแแแแแแ แแกแแแ แซแแคแแแแก แจแแแ แคแฃแแฅแชแแแแแ แแแ, แแแแฌแแ แแ แแ แแแ แแแแแ, แ แแแแแแแช แแงแแแแแแ แแแ, แแแแแแแชแแแแ, แ แแแแแแแช แแ แแงแแแแแ แฎแแแแ แซแแแแ แแแแ แแชแแแแแก แจแแกแ แฃแแแแแกแแก. แแกแแแฅแ แแแแแแชแแแก/แแแแแแแแแก แแแแแงแแแแแ แแ แแก แแ แแ แแ แแฃแแแแช แ แแแแแแแแ แกแขแแขแแแก แแแแ, แแแแ แแ แแ แจแแแแชแแแแ แ แแแแแแแแ แฌแแแแแแแแแแ แแแแแแ แแแกแ แแ แกแ:
- async แแ แแก แแแแแแแก แแแแแคแแแแขแแ แ, แ แแแแแแช แแแ แฃแแแแก แแแแชแแแแก แแ void-แก
- แแ await แแ แแก แแแฃแแแแแแแ Task แแแแแแแก แแแแ แแขแแ แ.
แแแแแ แแ แแฎแแ: แแแแแแแแแก แแแแ แแขแแ แ, แแแแแ แจแแแแฎแแแแแจแ (แแ แกแแแแแก แแแแแแแแแแกแแแ), แแแแแแแแกแฃแคแแแแก แจแแกแ แฃแแแแแก แแแแแแแแ แ แซแแคแก แจแแแแแแแจแ, แแ แ แแแแกแแช แแแแแแแแ แแแแกแ แฃแแแแก แจแแกแ แฃแแแแแก แแ แแแแแก (แคแแฅแขแแแ แแแแ, แฃแคแ แ แกแฌแแ แ แแฅแแแแ แแแแขแแฅแกแขแแก แแฅแแ , แแแแ แแ แแแแก แจแแกแแฎแแ แแแแแแแแแแแ) แแแแแ แซแแแแแก แแแแแแแก แจแแกแ แฃแแแแแก แจแแแแแแแจแ. .NET-แแก แจแแแแแ, แแก แแแฅแแแแแแ แแแแแ แแแแแ แแกแแแ, แ แแแแ แช yield return, แ แแแแกแแช แแแฌแแ แแแ แแแแแแ แแแแแแฅแชแแแ แแแแ แแแแกแแ, แ แแแแแแช แแ แแก แกแแฎแแแแฌแแคแ แแแแฅแแแ แแ แจแแแซแแแแ แจแแกแ แฃแแแแก แชแแแแแฃแ แแแฌแแแแแแ, แแ แแแแแแแ แแแแแแแ แแแแแแแแแแ แ. แแแแแกแแแแ แแกแฃแ แแแแก แจแแฃแซแแแ แแแฌแแ แแก แแแแแกแแแแ แ แแแ แขแแแ แแแแ asynั/wait-แแก แแแแแงแแแแแแ, แจแแแแแแแแก แแ แแแฎแแก แแกแแแแแแ JetBrains dotPeek-แแก แแแแแงแแแแแแ Compiler Generated Code-แแ แฉแแ แแฃแแ.
แแแแแ แจแแแฎแแแแ Task-แแก แแแจแแแแแกแ แแ แแแแแงแแแแแแก แแแ แแแแขแแแก. แฅแแแแแ แแแชแแแฃแ แแแแแก แแแแแแแแจแ, แฉแแแ แแฅแแแแ แแฎแแ แแแแชแแแแก, แ แแแแแแช แแ แแคแแ แก แแแแแแแก แกแแกแแ แแแแแ (Thread.Sleep(10000)), แแแแ แแ แ แแแแฃแ แชแฎแแแ แแแแจแ แแก แฃแแแ แแงแแก แ แแฃแแ แแ แแชแแกแแ แแก แแแขแแแกแแฃแ แ แกแแแฃแจแแ.
using TCO = System.Threading.Tasks.TaskCreationOptions;
public static async void VoidAsyncMethod() {
var cancellationSource = new CancellationTokenSource();
await Task.Factory.StartNew(
// Code of action will be executed on other context
() => Thread.Sleep(10000),
cancellationSource.Token,
TCO.LongRunning | TCO.AttachedToParent | TCO.PreferFairness,
scheduler
);
// Code after await will be executed on captured context
}
Task แแฅแแแแแ แ แแแแแแแแ แแแ แแแแขแแ:
- LongRunning แแ แแก แแแแแจแแแแ แแแแกแ, แ แแ แแแแแแแแ แกแฌแ แแคแแ แแ แจแแกแ แฃแแแแแ, แ แแช แแแแก แแแจแแแแก, แ แแ แจแแแซแแแแ แฆแแ แแแก แแแแก แแแแแแแแกแฌแแแแแ, แ แแ แแ แแแฆแแ แแแแ แแฃแแแแแ, แแ แแแแ แจแแฅแแแแ แชแแแแ แแ แแแแชแแแแกแแแแก, แ แแแ แแ แแแแแแแแแ แกแฎแแแแ.
- AttachedToParent - แแแแชแแแแแ แจแแแซแแแแ แแแแแแแแแก แแแ แแ แฅแแแจแ. แแฃ แแก แแแ แแแแขแ แแฅแแ แแแแแงแแแแแฃแแ, แแแจแแ แแแแชแแแ แจแแแซแแแแ แแงแแก แแกแแ แแแแแแแ แแแแแจแ, แกแแแแช แแก แแแแแ แแแแกแ แฃแแ แแ แแแแแแแ แจแแแแแแแก แแฆแกแ แฃแแแแแก.
- PreferFairness - แแแจแแแแก, แ แแ แฃแแแแแกแ แแฅแแแแแแ แจแแกแแกแ แฃแแแแแแ แแแแแแแแแแ แแแแชแแแแแ แฃแคแ แ แแแ แ แจแแแกแ แฃแแแ, แแแแ แ แแแแแแแแแแแ แแแแแแแแแแแ. แแแแ แแ แแก แแฎแแแแ แ แแแแแแแแแชแแแ แแ แจแแแแแ แแ แแ แแก แแแ แแแขแแ แแแฃแแ.
แแแแแแแกแแแแก แแแแแชแแแฃแแ แแแแ แ แแแ แแแแขแ แ แแ แแก CancellationToken. แแแแ แแชแแแก แแแฃแฅแแแแแก แกแฌแแ แแ แแแกแแแฃแจแแแแแแแ แแแกแ แแแฌแงแแแแก แจแแแแแ, แจแแกแ แฃแแแแฃแแ แแแแ แฃแแแ แแงแแก แจแแแกแแแฃแแ แฉแแแแแแ CancellationToken แแแแแแแ แแแแแกแแแแก. แแฃ แจแแแแฌแแแแแแ แแ แแ แแก, แแแจแแ CancellationTokenSource แแแแแฅแขแแ แแแแแซแแฎแแแฃแแ Cancel แแแแแแ แจแแซแแแแก แจแแแฉแแ แแก แแแแแแแแแก แจแแกแ แฃแแแแ แแฎแแแแ แแแก แแแฌแงแแแแแแ.
แแแแ แแแ แแแแขแ แ แแ แแก TaskScheduler แขแแแแก แแ แแคแแแแก แแแแแฅแขแ. แแก แแแแกแ แแ แแแกแ แจแแแแแแแแแแแ แจแแฅแแแแแแ แแแแกแแแแก, แ แแ แแแแแแแขแ แแแแ แแแแชแแแแแแก แซแแคแแแจแ แแแแแฌแแแแแแก แกแขแ แแขแแแแแแ; แแแแฃแแแกแฎแแแแแ, Task แจแแกแ แฃแแแแแ แจแแแแฎแแแแแ แซแแคแแ แแฃแแแแแ.
แแแแแแแแแก แแแแ แแขแแ แ แแแแแแงแแแแแ แจแแฅแแแแ Task-แแ, แ แแช แแแจแแแแก, แ แแ แแแก แจแแแแแ แแแฌแแ แแแ แแแแ, แแฃ แแ แแก แแกแแแ, แจแแกแ แฃแแแแแ แแแแแ แแแแขแแฅแกแขแจแ (แฎแจแแ แแ แแก แแแจแแแแก แแแแแ แซแแคแแ), แ แแแแ แช แแแแ แแแแแแแแแแแ.
แแแแแแ แแแแแจแแฃแแแ, แ แแแแ แช async void, แ แแช แแแจแแแแก, แ แแ แแแก แจแแฃแซแแแ แแแแแแงแแแแก แแแแแแแแแก แแแแ แแขแแ แ, แแแแ แแ แแแ แแแแแก แแแแ แแแ แแแแแแแแแ แจแแกแ แฃแแแแแก. แแฃ แแกแแแ แคแฃแแฅแชแแ แแฃแชแแแแแแแแ, แแแจแแ แแแแแแแ แฃแแแ แแแแแ แฃแแแก Task. แแแแแแแแ, แ แแแแแแแช แแฆแแแแจแแแแ async void แกแแแแแแ แแแแ แชแแแแแฃแแแ: แ แแแแ แช แฌแแกแ, แแก แแ แแก แแแแแแแแแแก แแแแแฃแจแแแแแแแแ แแ แกแฎแแ แแแแแแแแ, แ แแแแแแแช แแฃแจแแแแแ แชแแชแฎแแแ แแ แแแแฌแงแแแแ แแ แแแชแแแก. แแฃ แแฅแแแ แแญแแ แแแแแ แแ แ แแฎแแแแ แจแแกแแซแแแแแแแ แแแแแแแแ แจแแกแ แฃแแแแแก แแแกแ แฃแแแแแก, แแ แแแแ แแแแแ แฃแแแ แจแแแแแ, แแแจแแ แฃแแแ แแแแแแงแแแแ Task.
แแแแแแแแแแ, แ แแแแแแช StartNew แแแแแแแ แแแแแ แฃแแ, แแกแแแ แ แแแแ แช แแแแแกแแแแ แกแฎแแแแ, แจแแแแซแแแแ แแแแแซแแฎแแ ConfigureAwait แแแแแแ แชแ แฃ แแแ แแแแขแ แแ, แจแแแแแ แจแแกแ แฃแแแแ แแแแแแแก แจแแแแแ แแแแ แซแแแแแแ แแ แ แแแแแฆแแแฃแ แแแแขแแฅแกแขแแ, แแ แแแแ แแแแแแแแฃแ แแ. แแก แงแแแแแแแแก แฃแแแ แแแแแแแแก, แ แแแแกแแช แจแแกแ แฃแแแแแก แแแแขแแฅแกแขแ แแ แแ แแก แแแแจแแแแแแแแแ แแแแแกแแแแก แแแแแแแแแก แจแแแแแ. แแก แแ แแก แแกแแแ MS-แแก แ แแแแแแแแแชแแ แแแแแก แแแฌแแ แแกแแก, แ แแแแแแช แแแฌแแแแแฃแแ แแฅแแแแ แจแแคแฃแแฃแแ แแแแแแแแแแแจแ.
แแแแแ แชแแขแ แแแขแ แแแกแแฃแแ แแ แแแแแ, แแฃ แ แแแแ แจแแแแซแแแแ แแแแแแแแ แแแแแแแแแก แแแกแ แฃแแแแแก. แฅแแแแแ แแแชแแแฃแแแ แแแแแก แแแแแแแแ, แแแแแแขแแ แแแแ, แ แแแแก แแแแแแแ แแแแแแแแ แแแ แแแแแแ แแแ แแแ แแ แ แแแแก แแแแแแแ แแแ แแแแแแ แชแฃแแแ.
public static async void AnotherMethod() {
int result = await AsyncMethod(); // good
result = AsyncMethod().Result; // bad
AsyncMethod().Wait(); // bad
IEnumerable<Task> tasks = new Task[] {
AsyncMethod(), OtherAsyncMethod()
};
await Task.WhenAll(tasks); // good
await Task.WhenAny(tasks); // good
Task.WaitAll(tasks.ToArray()); // bad
}
แแแ แแแ แแแแแแแแจแ, แฉแแแ แแแแแแแแแ แแแแแแแแแก แแแกแ แฃแแแแแก แแแแแซแแฎแแแแก แแแแแก แแแแแแแแแก แแแ แแจแ; แฉแแแ แแฃแแ แฃแแแแแแ แจแแแแแแก แแแแฃแจแแแแแแก แแฎแแแแ แแแจแแ, แ แแแแกแแช แแก แฃแแแ แแ แกแแแแแก; แแแแแแแ แแ, แแแแแซแแฎแแแแก แแแแ แ แฉแแแ แกแแแฃแแแ แแแฌแงแแแแแแแแแ.
แแแแ แ แแแ แแแแขแจแ แแแแแแแแ แแแแแซแแฎแแแแก แซแแคแก, แกแแแแ แแ แแแแแแแแแแแ แแแแแแแก แจแแแแแ. แแก แชแฃแแแ แแ แ แแฎแแแแ แแแแขแแ, แ แแ แฉแแแ แแแแแแแแแ แแแแ, แแ แแแ แแแแก แแกแแแ แฆแแ แแแฃแแ แ แแกแฃแ แกแ, แแแ แขแแแ แฃแกแแฅแแฃแ แแแแ, แแ แแแแ แแแแขแแแแช, แ แแ แแฃ แแแแแแแก แแแแ, แ แแแแแกแแช แฉแแแ แแฃแฌแแแแแ, แจแแแชแแแก แแแแแแแแก แแ แกแแแฅแ แแแแแแชแแแก แแแแขแแฅแกแขแ แแแแแฎแแแก แแแแแซแแฎแแแแก แแแแแจแ แแแแ แฃแแแแแก แจแแแแแ. แแแแแแแแแ, แแแจแแ แแแแแฆแแแ แฉแแฎแก: แแแแแแซแแฎแแแแแ แซแแคแ แแแแแแแ แแกแแแฅแ แแแฃแแ แแแแแแแก แจแแแแแแก แแแแแแแแแก, แแกแแแฅแ แแแฃแแ แแแแแแ แแแแแ แชแแแแแแก แแแแแแ แซแแก แแแกแ แจแแกแ แฃแแแแ แแแแแซแแฎแแแฃแ แซแแคแจแ.
แแ แแแแแแแแก แแแแแ แแ แแ แแแแฃแกแ แแ แแก แจแแชแแแแแแแก แ แแฃแแ แแแแฃแจแแแแแ. แคแแฅแขแแ, แ แแ แแกแแแฅแ แแแฃแ แแแแจแ แจแแชแแแแแแก async/wait-แแก แแแแแงแแแแแแกแแก แซแแแแแ แแแ แขแแแแ แแแแฃแจแแแแแ - แแกแแแ แแกแ แแฅแชแแแแแ, แแแแฅแแก แแแแ แกแแแฅแ แแแฃแแ แแงแแก. แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแฃ แฉแแแ แแแแแแแงแแแแแ แกแแแฅแ แแแฃแ แแแแแแแก แแแแแ แชแแแแก แแแแชแแแแแ, แกแแฌแงแแกแ แแแแแแแแแแกแ แแแแแแฅแชแแแ AggregateException, แ.แ. แแแแแแแแแแกแแแแก แแแกแแแแแ แแแแแ, แแฅแแแ แแแแแฌแแแ แจแแแแแฌแแแ InnerException แขแแแ แแ แฉแแฌแแ แแ if แฏแแญแแ แแ แ catch แแแแแจแ แแ แแแแแแงแแแแ catch แแแแกแขแ แฃแฅแชแแแกแแก, แแแชแแแแ catch แแแแแแแแก แฏแแญแแแกแ, แ แแแแแแช แฃแคแ แ แชแแแแแแแ C# แกแแแงแแ แแจแ.
แแแกแแแ แแ แแแแ แแแแแแแแแแ แแกแแแ แแแแแจแแฃแแแ แชแฃแแแ แแแแแ แแแแแแแ แแ แจแแแชแแแก แงแแแแ แแแแแ แแ แแแแแแแก.
WhenAny แแ WhenAll แแแแแแแแ แฃแแแแฃแ แแกแแ แแแกแแฎแแ แฎแแแแแแ แแแแชแแแแแแก แฏแแฃแคแแก แแแแแแแแจแ; แแกแแแ แแฎแแแแแ แแแแชแแแแแแก แฏแแฃแคแก แแ แแจแ, แ แแแแแแช แแแแฅแขแแฃแ แแแแ แแ แ แแแแกแแช แฏแแฃแคแแแแ Task แแแ แแแแแ แแแแฅแขแแฃแ แแแแ, แแ แ แแแแกแแช แงแแแแ แแแแแแแ แแแแกแ แฃแแแแก แจแแกแ แฃแแแแแก.
แซแแคแแแแก แแแฉแแ แแแ
แกแฎแแแแแกแฎแแ แแแแแแแก แแแแ แจแแกแแซแแแ แกแแญแแ แ แแแฎแแแก แแแแแแแก แจแแฉแแ แแแ แแแกแ แแแฌแงแแแแก แจแแแแแ. แแแแก แแแแแแแแแก แ แแแแแแแแ แแแ แแ แกแแแแแก. Thread แแแแกแก แแฅแแก แแ แ แกแแแแแแแแ แแแกแแฎแแแแแฃแแ แแแแแแ: แฒแแฃแฅแแแแ ะธ แจแแฃแจแแแแก. แแแ แแแแ แแ แแ แแก แ แแแแแแแแแแฃแแ แแแแแกแแงแแแแแแแ, แ แแแแแ แแแแแกแแแแ แจแแแแฎแแแแแ แแแแแแขแจแ แแแ แแแแแก แจแแแแแ, แแแแแกแแแแ แ แแแกแขแ แฃแฅแชแแแก แแแแฃแจแแแแแแก แแ แแก, แแแแแแแแแแกแ แแฅแแแแ แแแจแแแแฃแแ ThreadAbortedException. แแฅแแแ แแ แแแแ, แ แแ แแกแแแ แแแแแแแแแแกแ แแฅแแแแ แแแแแกแแแแ แ แแแแแ แ แแชแฎแแแก แชแแแแแแก แแแแ แแแกแแก, แแ แ? แแ แแ แแแแแแแก แแแแแงแแแแแแกแแก, แแก แซแแแแแ แ แแแแฃแ แ แกแแขแฃแแชแแแ. แแฃ แแญแแ แแแแแ CLR-แแก แแแแ แแกแแแ แแแแแแแแแแกแแก แฌแแ แแแฅแแแแก แแแแแแแ แแชแแแแแ แแแแแก แแแ แแแแฃแ แแแแแแแแแจแ, แจแแแแซแแแแ แแแแแแขแแแแ แแก แแแ แแแจแ. แแแแ.BeginCriticalRegion, แแแแ.EndCriticalRegion. แกแแแแแแ แแแแแจแ แฉแแฌแแ แแแ แแแแแกแแแแ แ แแแแ แจแแคแฃแแฃแแแ แแกแแ แแแ แแแจแ. แแ แแแแแแแ, แฉแแ แฉแ แแแแแก แกแแฆแ แแแจแ แจแแแแซแแแแ แแแแแแ แแแแแแแ แชแแ แแแแ แแแแแแ, แแแแ แแ แแ แ แชแแ แแแแ แกแแแแแแแ. แแแแแ แแกแแคแขแ แแแแแแแ แฃแแ แงแแคแก แแ แแแแแแก, แ แแ แแ แฉแแ แแแก แแแ .net core-แจแ.
แจแแคแแ แฎแแแแก แแแแแแ แฃแคแ แ แแ แแแแแแแ แแแแ แแฃแจแแแแก. แแแก แจแแฃแซแแแ แจแแฌแงแแแขแแก แแแแ แแแแแแแแแแกแแก แแแ แแ ThreadInterruptedException แแฎแแแแ แแ แแแแแแขแแแจแ, แ แแแแกแแช แซแแคแ แแแแแแแแแก แแแแแแแ แแแแแจแแ. แแก แแ แแแแแแแ แแแแแจแ แจแแแแก แแแแแแแแแกแแก WaitHandle-แแก แแแแแแแแจแ, แฉแแแแขแแแกแแก แแ Thread.Sleep-แแก แแแ แแแแแก แจแแแแแ.
แแแแแ แแฆแฌแแ แแแ แแ แแแ แแแ แแแแขแ แชแฃแแแ, แ แแแแแ แแกแแแ แแ แแแ แแแแแแแ แแแแแแ. แแแแแกแแแแแ แแ แแก แกแขแ แฃแฅแขแฃแ แแก แแแแแงแแแแแ CancellationToken แแ แแแแกแ CancellationTokenSource. แกแแฅแแ แแกแแ: แแฅแแแแแ CancellationTokenSource แแแแกแแก แแแแแแแแแ แ แแ แแฎแแแแ แแแก, แแแแช แแแก แคแแแแก, แจแแฃแซแแแ แจแแแฉแแ แแก แแแแ แแชแแ แแแแแแแก แแแแแซแแฎแแแแ. แแแฃแฅแแแแ. แแฎแแแแ CancellationToken แแแแแแชแแแ แแแแแ แแแแ แแชแแแก. CancellationToken-แแก แแคแแแแแแแแก แแ แจแแฃแซแแแแ แแแแแ แแแแฃแฅแแแ แแแแ แแชแแ, แแแแ แแ แจแแฃแซแแแแ แแฎแแแแ แจแแแแแฌแแแ แแแฃแฅแแแ แแฃ แแ แ แแแแ แแชแแ. แแแแกแแแแก แแ แแก แแแแแแฃแ แ แแแแกแแแ แแแแฎแแแแแแแ แแแฃแฅแแแแ แแ แแแแแแ ThrowIfCancelRequested. แแก แฃแแแแแกแแแแแ แแแแแแแแแแกแก แแแแงแแแแแก TaskCancelledException แแฃ Cancel แแแแแแ แแแแแแซแแฎแแแแแ CancellationToken แแแแแแแแแ แแ แแฃแแแงแฃแจแจแ. แแ แแก แแ แแก แแแแแแ, แ แแแแแกแแช แแแ แฉแแแ แแแแแแงแแแแ. แแก แแ แแก แแแฃแแฏแแแแกแแแ แฌแแแ แแแ แแแแขแแแแแ แจแแแแ แแแแ แกแ แฃแแ แแแแขแ แแแแก แแแแแแแแแ, แแฃ แ แ แแแแแแขแจแ แจแแแซแแแแ แจแแฌแงแแแก แแแแแแแแแแกแแก แแแแ แแชแแ.
แแแแแก แจแแฉแแ แแแแก แงแแแแแแ แกแแกแขแแแ แแแ แแแแขแแ Win32 API TerminateThread แคแฃแแฅแชแแแก แแแแแซแแฎแแแ. CLR-แแก แฅแชแแแ แแ แคแฃแแฅแชแแแก แแแแแซแแฎแแแแก แจแแแแแ แจแแแซแแแแ แแ แแแ แแแแแแแ แแแแแ แแงแแก. MSDN-แแ แจแแแแแแ แฌแแ แแ แแ แคแฃแแฅแชแแแก แจแแกแแฎแแ: โTerminateThread แแ แแก แกแแจแแจแ แคแฃแแฅแชแแ, แ แแแแแแช แฃแแแ แแฅแแแก แแแแแงแแแแแฃแแ แแฎแแแแ แงแแแแแแ แแฅแกแขแ แแแแแฃแ แจแแแแฎแแแแแแจแ. "
แแแซแแแแแแฃแแ API-แแก แแแแแงแแแแ Task Based-แแ FromAsync แแแแแแแก แแแแแงแแแแแแ
แแฃ แแฅแแแ แแแแแแแ แแแแ แแแฃแจแแแ แแ แแแฅแขแแ, แ แแแแแแช แแแแฌแงแ Tasks-แแก แแแแแ แแแแก แจแแแแแ แแ แจแแฌแงแแแขแ แแแแแแแแแ แแแแก แฃแแแขแแกแแแแกแแแแก แแจแแแแ แกแแจแแแแแแแ, แแแจแแ แแ แแแแแฌแแแ แกแแฅแแ แฃแแแ แแ แซแแแ API-แกแแแ, แ แแแแ แช แแแกแแแ แแฎแแ แแก, แแกแแแ แแฅแแแแก แแฃแแแแแ. แฌแแ แกแฃแแจแ แแฌแแแ. แกแแแแแแแแ แแ, .NET Framework-แแก แแฃแแแแ แแแ แฃแแ แฉแแแแแ, แแฃแแชแ แจแแกแแซแแแ แแแแแแ แแงแ แกแแแฃแแแ แแแแแ แแ แฃแแแ. แ แแแแ แช แแ แฃแแแ แแงแแก, .NET-แก แแฅแแก แแ แแแแแ แแแกแขแ แฃแแแแขแ แซแแแแ แแกแแแฅแ แแแฃแแ แแ แแแ แแแแ แแแแก แแแแแแแแแแ แแแฌแแ แแแ แแแแแก แฃแแขแแแแแแฃแแแ แแแแแแ แขแแชแแแกแแแแก แแฎแแแแ. แแ แ-แแ แแ แแแแแแแแ TaskFactory-แแก FromAsync แแแแแแ. แฅแแแแแ แแแชแแแฃแ แแแแแก แแแแแแแแจแ, แแ แแแแแแแก แแแแแงแแแแแแ แแ แแแฎแแแ WebRequest แแแแกแแก แซแแแ แแกแแแฅแ แแแแแแชแแแก แแแแแแแแก Task-แจแ.
object state = null;
WebRequest wr = WebRequest.CreateHttp("http://github.com");
await Task.Factory.FromAsync(
wr.BeginGetResponse,
we.EndGetResponse
);
แแก แแฎแแแแ แแแแแแแแแ แแ แแแแแแแแ แกแแแแ แแฃแแแ, แ แแ แแแแก แแแแแแแแ แแแแแฌแแแ แฉแแจแแแแแฃแแ แขแแแแแแ, แแแแ แแ แแแแแกแแแแ แ แซแแแแ แแ แแแฅแขแ แฃแแ แแแแ แกแแแกแแ BeginDoSomething แแแแแแแแแ, แ แแแแแแแช แแแ แฃแแแแแ IAsyncResult แแ EndDoSomething แแแแแแแแก, แ แแแแแแแช แแฆแแแแ แแแก.
แแแแแแแแแแ แแแแแแแแ แแแแแแ API แกแแแฃแจแแแแ แแแคแฃแซแแแแฃแแแ TaskCompletionSource แแแแกแแก แแแแแงแแแแแแ
แแแแแ แแ แแ แแแแจแแแแแแแแแ แแแกแขแ แฃแแแแขแ, แ แแแแแแช แแแกแแแแแแแกแฌแแแแแแแแ แแ แแก แแแแกแ TaskCompletionSource. แคแฃแแฅแชแแแแแก, แแแแแแกแ แแ แแแฅแแแแแแแก แแ แแแชแแแแก แแแแแกแแแ แแกแแ, แแก แจแแแซแแแแ แแแ แแแแฃแแฌแแแแ แแแแแแแแแแ ThreadPool แแแแกแแก RegisterWaitForSingleObject แแแแแแก, แ แแแแแก แจแแกแแฎแแแแช แแแแแ แแแแฌแแ แ. แแ แแแแกแแก แแแแแงแแแแแแ, แแฅแแแ แจแแแแซแแแแ แแแ แขแแแแ แแ แแแฎแแ แฎแแแฃแแแ แแแแแแขแแแแ แซแแแแ แแกแแแฅแ แแแฃแแ API-แแแ Tasks-แจแ.
แแฅแแแ แแขแงแแแ, แ แแ แแ แฃแแแ แแแกแแฃแแ แ แแ แแแแแแแแกแแแแแก แแแแแฃแแแแแแ TaskFactory แแแแกแแก FromAsync แแแแแแแ. แแฅ แฉแแแ แแแแแแฌแแแก แแแแแฎแกแแแแ .net-แจแ แแกแแแฅแ แแแฃแแ แแแแแแแแแก แแแแแแแแ แแแแก แแแแแ แแกแขแแ แแ, แ แแแแแกแแช Microsoft แแแแแแแแแแแ แแแแ 15 แฌแแแก แแแแแแแแแแแจแ: Task-Based Asynchronous Pattern (TAP), แแงแ แแกแแแฅแ แแแฃแแ แแ แแแ แแแแ แแแแก แแแแฃแจแ (APP), แ แแแแแแช. แแแแแแแแก แแฎแแแแแ แแแกแแฌแงแแกแDoSomething แแ แฃแแแแแ IAsync แจแแแแแ แแ แแแแแแแแ แแแกแแกแ แฃแแDoSomething, แ แแแแแแช แแฆแแแก แแแก แแ แแ แฌแแแแแก แแแแแแแแ แแแแแกแแแแก FromAsync แแแแแแ แฃแแ แแแแ แกแ แฃแแงแแคแแแแ, แแแแ แแ แแ แแแ แแแแแแแแแแแจแ แแก แจแแแชแแแแ แแแแแแแแแแ แแแคแฃแซแแแแฃแแ แแกแแแฅแ แแแฃแแ แแแแฃแจแแ (แแฆแแแกแแแแแ แแแ แขแแแแ แแแแก), แ แแแแแแช แแแ แแฃแแแแแ, แ แแ แแแแแแแ แฌแแแแแญแ แแแแแ แแกแแแฅแ แแแฃแแ แแแแ แแชแแแก แแแกแ แฃแแแแแกแแก.
TaskCompletionSource แจแแกแแแแจแแแแแ แฆแแแแกแซแแแแแก แแแแแแแก แแแ แจแแแ แแแแแฃแแ Tasks แแ แแแแแแแแ แแแแแแ API-แแแแก แจแแกแแคแฃแแแ. แแแกแ แแฃแจแแแแแก แแ แกแ แจแแแแแแแ: แแ แแแแกแแก แแแแแฅแขแก แแฅแแก Task แขแแแแก แกแแฏแแ แ แแแแกแแแ, แ แแแแแก แแแแแแแ แแแแแก แแแแขแ แแแ แจแแกแแซแแแแแแแ TaskCompletionSource แแแแกแแก SetResult, SetException แแ แ.แจ. แแแแแแแแแ. แแ แแแแแแแแจแ, แกแแแแช แแแแแแแแแก แแแแ แแขแแ แ แแฅแแ แแแแแงแแแแแฃแแ แแ แแแแชแแแแแ, แแก แจแแกแ แฃแแแแแ แแ แฌแแ แฃแแแขแแแแแ แแฅแแแแ แแแแแแแแแแกแแ, แแแแแแแแแแฃแแแ TaskCompletionSource-แแ แแแแแงแแแแแฃแแ แแแแแแแก แแแฎแแแแแ. แแฃ แแก แฏแแ แแแแแ แแแฃแแแแแ แแ, แแแแแ แจแแแฎแแแแ แแ แแแแแก แแแแแแแแก, แกแแแแช แแแแแแ แแ แซแแแแ EAP API แจแแคแฃแแฃแแแ Task-แจแ TaskCompletionSource-แแก แแแแแงแแแแแแ: แแแแแแแแก แแแแฅแขแแฃแ แแแแกแแก, Task แแแแแแ แแแกแ แฃแแแแฃแ แแแแแแแ แแแแแจแ แแ แแแแแแ, แ แแแแแแช แแแแแแงแแแแแแ แแแแแแแ แแแแ แแขแแ แก. แแ แแแแชแแแแก แแแแแแฎแแแแก แแแกแ แจแแกแ แฃแแแแ แแแแแฅแขแแก แแแฆแแแแก แจแแแแแ แจแแแแแแ.
public static Task<Result> DoAsync(this SomeApiInstance someApiObj) {
var completionSource = new TaskCompletionSource<Result>();
someApiObj.Done +=
result => completionSource.SetResult(result);
someApiObj.Do();
result completionSource.Task;
}
TaskCompletionSource แ แฉแแแแแ แแ แฎแ แแแแแ
แซแแแแ API-แแแแก แจแแคแฃแแแ แแ แแ แแก แงแแแแแคแแ แ, แ แแช แจแแแซแแแแ แแแแแแแแก TaskCompletionSource-แแก แแแแแงแแแแแแ. แแ แแแแกแแก แแแแแงแแแแแ แฎแกแแแก แกแฎแแแแแกแฎแแ API-แแแแก แแแแแแแแก แกแแแแขแแ แแกแ แจแแกแแซแแแแแแแแก Tasks-แแ, แ แแแแแแแช แแ แแแแแแแแ แซแแคแแแก. แแแแแแ แแ, แ แแแแ แช แแแแฎแกแแแก, แซแแแ แแแฆแแ แแแฃแแ แ แแกแฃแ แกแแ แแ แแแแ แ แแแแแแแแ แจแแแฆแฃแแฃแแแ (แซแแ แแแแแแ แแแแ แแขแแฃแแ แแแฎแกแแแ แแแแก แแแชแฃแแแแแ). แแก แจแแแฆแฃแแแ แแแแแแแ แแแแฆแฌแแแ, แแแแแแแแแ, แแแขแแแ แแฃแแ แแแ แแแแแแแชแแแก แจแแแฃแจแแแแแแ, แ แแฃแแ แแแแแแก แแแแแแแ. แแแแแ แแแแแแฎแแแแ แแก แจแแกแแซแแแแแแแแแ, แ แแแแแแแแช แแ แแกแแฃแแ แแ แแกแแแ แฎแ แแแแก แแแแฎแแ แชแแแแแแแกแแก, แ แแแแ แแชแแ Long-Polling.
แแแแแแ, แฎแ แแแแก แแ แกแ แแกแแแแ: แแฅแแแ แฃแแแ แแแแฆแแ แแแคแแ แแแชแแ API-แแแ แแแก แแฎแแ แแแ แแแแฎแแแ แ แแแแแแ แแ แแแแแแแแก แจแแกแแฎแแ, แฎแแแ API, แ แแขแแแฆแแช, แแแ แแชแแแแแแก แแแแแแแแก, แแแแ แแ แจแแฃแซแแแ แแฎแแแแ แแแแแแแ แแแแแก แแแแ แฃแแแแ. แแแแก แแแแแแแแแ แงแแแแ API, แ แแแแแแช แแจแแแแแฃแแแ HTTP-แแ WebSocket-แแก แแ แแแแ แแ แ แแชแ แ แแแแ แแแแแแแ แจแแฃแซแแแแแแ แแงแ แแ แขแแฅแแแแแแแแก แแแแแงแแแแแ. แแแแแแขแก แจแแฃแซแแแ แฐแแแแฎแแก HTTP แกแแ แแแ แก. HTTP แกแแ แแแ แก แแแแแ แแ แจแแฃแซแแแ แแแแแแขแแแ แแแแฃแแแแแชแแแก แแแฌแงแแแ. แแแ แขแแแ แแแแแกแแแแแ แแ แแก แกแแ แแแ แแก แแแแแแแแฎแแ แขแแแแแ แแก แแแแแงแแแแแแ, แแแแ แแ แแก แฅแแแแก แแแแแขแแแแ แแแขแแแ แแแแก แกแแ แแแ แแ แแ แแแแแขแแแแ แแแงแแแแแแแก แกแแจแฃแแแแ TimerInterval / 2. แแแแก แแแแแแแ แแกแแชแแแแแแแ แแแแแแแแแแก แฎแ แแแ แกแแฎแแแฌแแแแแแ Long Polling, แ แแแแแแช แแฃแแแกแฎแแแแก แแแกแฃแฎแแก แแแแแแแแแแแก. แกแแ แแแ แแ, แกแแแแ แแแแ แแแแแฌแฃแ แแแ แแ แแแฎแแแแ แแแแแแแ. แแฃ แแแแแแแ แแแฎแแ, แแแจแแ แแก แแฃแจแแแแแแ, แแฃ แแ แ, แแแจแแ แแแแฎแแแแ แฎแแแแฎแแ แแแแแแแแแ.
while(!eventOccures && !timeoutExceeded) {
CheckTimout();
CheckEvent();
Thread.Sleep(1);
}
แแแแ แแ แแกแแแ แแแแแกแแแแแ แกแแจแแแแแแแ แแฆแแแฉแแแแแ, แ แแแแ แช แแ แแแแแแแแก แแแแแแแแจแ แแแแแแขแแแแก แ แแแแแแแแ แแแแแ แแแแ, แ แแแแแ... แงแแแแแ แแกแแแ แแแแแแขแ แแแแแแแก แแแแ แแแแแก แแแแแแแแก แแแแแแแแจแ. แแแแฎ, แแ แฉแแแ แแแฆแแแ แแแแแขแแแแ 1 ms แแแแแแแแแแแก แแแแแแแแก แแแจแแแแแกแแก, แงแแแแแแ แฎแจแแ แแ แแก แแ แแ แแก แแแแจแแแแแแแแแ, แแแแ แแ แ แแขแแ แแแฅแชแแแ แแ แแแ แแแฃแ แฃแแ แฃแแแแแงแแคแแก แฃแแ แแกแแ, แแแแ แ แแก แจแแแซแแแแ แแงแแก? แแฃ Thread.Sleep(1) แแแแแแฆแแแ, แแแจแแ แฃแจแแแแแแ แฉแแแขแแแ แแแแ แแ แ แแ แแชแแกแแ แแก แแแ แแแก 100%-แแ แฃแแแฅแแแแแ, แฃแกแแ แแแแแ แชแแแแจแ แแ แฃแแแแก. TaskCompletionSource-แแก แแแแแงแแแแแแ แจแแแแซแแแแ แแแ แขแแแแ แจแแชแแแแแ แแก แแแแ แแ แแแแแแแ แแ แแแแแ แแแแแแแแแแแ แงแแแแ แแ แแแแแแ:
class LongPollingApi {
private Dictionary<int, TaskCompletionSource<Msg>> tasks;
public async Task<Msg> AcceptMessageAsync(int userId, int duration) {
var cs = new TaskCompletionSource<Msg>();
tasks[userId] = cs;
await Task.WhenAny(Task.Delay(duration), cs.Task);
return cs.Task.IsCompleted ? cs.Task.Result : null;
}
public void SendMessage(int userId, Msg m) {
if (tasks.TryGetValue(userId, out var completionSource))
completionSource.SetResult(m);
}
}
แแก แแแแ แแ แแ แแก แแแแ แฌแแ แแแแแแกแแแแก, แแแแ แแ แแฎแแแแ แแแแ แแแ แกแแแ. แ แแแแฃแ แจแแแแฎแแแแแแจแ แแแกแ แแแแแกแแงแแแแแแแ, แแฅแแแ แแกแแแ แแญแแ แแแแแ, แแแแแแฃแ, แแแฃแแแแแแแแ แกแแขแฃแแชแแแก, แ แแแแกแแช แจแแขแงแแแแแแแ แแแแแก แแ แแ แแก, แ แแแแกแแช แแแก แแ แแแแ แแแแแแแ: แแ แจแแแแฎแแแแแจแ, AsseptMessageAsync แแแแแแแ แฃแแแ แแแแแ แฃแแแก แฃแแแ แแแกแ แฃแแแแฃแแ Task. แแฃ แแก แงแแแแแแ แแแแ แชแแแแแฃแแ แจแแแแฎแแแแแ, แแแจแแ แจแแแแซแแแแ แแคแแฅแ แแ ValueTask-แแก แแแแแงแแแแแแแ.
แ แแแแกแแช แแแฆแแแ แแฎแแแแแก แจแแขแงแแแแแแแแแ, แแฅแแแแ แแ แแแแแแกแแแ TaskCompletionSource-แก แแแฅแกแแแแแจแ แแ แจแแแแแ แแแแแแแแแ แ แ แแแฎแแแแ แแแ แแแ แ แแแจแ: แแแแแฌแฃแ แแแ แแแแแแแแฃแแ แแ แแแก แแแขแแ แแแแ แแ แแแแฆแแแ แจแแขแงแแแแแแแ.
ValueTask: แ แแขแแ แแ แ แแแแ
async/wait แแแแ แแขแแ แแแ, แแกแแแ แ แแแแ แช yield return แแแแ แแขแแ แ, แแแแแแ แแ แแแแ แแแแแแแ แแแแแก แแแแฅแแแแก แแแแแแแแแ แแ แแก แแ แแก แแฎแแแ แแแแแฅแขแแก แจแแฅแแแ, แ แแแแแแช แแแแฅแแแก แงแแแแแแแแก แแ แแ แแก แแแแจแแแแแแแแแ, แแแแ แแ แแจแแแแ แจแแแแฎแแแแแแจแ แแแก แจแแฃแซแแแ แจแแฅแแแแก แแ แแแแแแ. แแก แจแแแแฎแแแแ แจแแแซแแแแ แแงแแก แแแแแแ, แ แแแแแกแแช แแแแแแแแแ แฎแจแแ แแ แฃแฌแแแแแแ, แฉแแแ แแกแแฃแแ แแแ แแแแฃแ แแ แแกแแฃแ แแแแกแแแแ แแแ แแ แฌแแแจแ. แแฃ แแกแแแ แแแแแแ แแกแแ แแแฌแแ แแแ, แ แแ แฃแแแขแแก แจแแแแฎแแแแแจแ แแแ แฃแแแแก แจแแแแแก แงแแแแ แแแแแแแแแก แแแแแแแก แแแแ แแแก แแแแแ, แแแจแแ .NET แฃแแ แฃแแแแแงแแคแก แแแแก แแแขแแแแแแชแแแก แแแกแขแ แฃแแแแขแก - ValueTask แกแขแ แฃแฅแขแฃแ แแก. แแแกแแแแแแ, แแแแแ แจแแแฎแแแแ แแแกแ แแแแแงแแแแแแก แแแแแแแแก: แแ แแก แฅแแจแ, แ แแแแแกแแช แซแแแแแ แฎแจแแ แแ แแแแแแแแ แ. แแแกแจแ แแ แแก แแแ แแแแฃแแ แแแแจแแแแแแแแแ แแ แจแแแแแ แฉแแแ แฃแแ แแแแ แแแแ แฃแแแแ แแแ; แแฃ แแ แ, แแแจแแ แแแแแแแแ แ แแแแแแ แ แแแ IO-แแ แแแ แแแกแแฆแแแแ. แแ แแแแแ แแแแแแแแ แแก แฃแแแแแกแแแแแ แแกแแแฅแ แแแฃแแแ, แ แแช แแแจแแแแก, แ แแ แแแแแ แแแแแแ แแฆแแแฉแแแแแ แแกแแแฅแ แแแฃแแ. แแแ แแแแ, แแแแแแแก แแแฌแแ แแก แแจแแแ แ แแแ แจแแแแแแแ:
public async Task<string> GetById(int id) {
if (cache.TryGetValue(id, out string val))
return val;
return await RequestById(id);
}
แชแแขแ แแแขแแแแแแชแแแก แกแฃแ แแแแแก แแ แแชแแ แแแ แจแแจแแก แแแแ, แแฃ แ แแก แแแแแแแฃแจแแแแแก แ แแกแแแแ แแ แแแแแก แจแแแแแแแกแแก, แจแแแแซแแแแ แแแแแฌแแ แแ แแก แแแแแแแแ แจแแแแแแแแแ แแ:
public Task<string> GetById(int id) {
if (cache.TryGetValue(id, out string val))
return Task.FromResult(val);
return RequestById(id);
}
แแแ แแแแช, แแ แจแแแแฎแแแแแจแ แแแขแแแแแฃแ แ แแแแแฌแงแแแขแ แแฅแแแแ แชแฎแแแ แแแแแแแก แแแขแแแแแแชแแ, แแแ แซแแ, แแแฅแกแแแแแแแแ แแแแจแแแแแแแแก แแแฆแแแ แงแแแแแแแแ แ แแแแแแขแ แแแแแงแแคแแกแ แแ GC-แแ แแแขแแแ แแแแก แแแ แแจแ, แฎแแแ แแ แแจแแแแ แจแแแแฎแแแแแแจแ, แ แแแแกแแช แฏแแ แแแแแ แแแญแแ แแแแ IO-แแ แแแแแกแแแ แแแแแชแแแแแแกแแแแก. , แงแแแแแคแแ แ แแแ แฉแแแ แแแแฃแก/แแแแฃแก แซแแแแแ:
public ValueTask<string> GetById(int id) {
if (cache.TryGetValue(id, out string val))
return new ValueTask<string>(val);
return new ValueTask<string>(RequestById(id));
}
แแแแแ แฃแคแ แ แแฎแแแก แแแแฎแแแแ แแแแแก แแ แแแฌแแแก: แแฃ แฅแแจแจแ แแ แแก แแแแจแแแแแแแ, แฉแแแ แแฅแแแแ แกแขแ แฃแฅแขแฃแ แแก, แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แ แแแแฃแ แ แแแแชแแแ แแฅแแแแ แแแฎแแแฃแแ แแแแจแแแแแแแแ. แแแแแซแแฎแแแแก แแแแก แแ แแแแขแแ แแกแแแก, แ แแแแ แแแแแ แจแแกแ แฃแแแ แแก แแแแ: ValueTask, C# แกแแแขแแฅแกแแก แแแแแกแแแ แแกแแ, แแฅแชแแแ แแกแแแ, แ แแแแ แช แฉแแแฃแแแแ แแแ Task แแ แจแแแแฎแแแแแจแ.
TaskSchedulers: แแแแแแแแแก แแแจแแแแแก แกแขแ แแขแแแแแแแก แแแ แแแ
แจแแแแแแ API, แ แแแแแแช แแแแแ แแแแแแฎแแแ, แแ แแก แแแแกแ TaskScheduler แแ แแแกแ แฌแแ แแแแแฃแแแแ. แแแแแ แฃแแแ แแฆแแแแจแแ, แ แแ TPL-แก แแฅแแก แฃแแแ แ แแแ แแแก แกแขแ แแขแแแแแแ แซแแคแแแจแ Tasks-แแก แแแแแฌแแแแแแกแแแแก. แแกแแแ แกแขแ แแขแแแแแแ แแแแกแแแฆแแ แฃแแแ TaskScheduler แแแแกแแก แจแแแแแแแแแแแจแ. แแแแฅแแแก แแแแแกแแแแ แ แกแขแ แแขแแแแ, แ แแแแแแช แจแแแซแแแแ แแแแญแแ แแแ, แจแแแแซแแแแ แแแแแแ แแแแแแแแแแแจแ. Parallel ExtensionsExtras, แจแแแฃแจแแแแแฃแแ Microsoft-แแก แแแแ , แแแแ แแ แแ แ .NET-แแก แแแฌแแแ, แแแแ แแ แแแฌแแแแแฃแแแ Nuget แแแแแขแแก แกแแฎแแ. แแแแแแ แแแแแแฎแแแแ แแแแแแ แ แแแแแแแก:
- CurrentThreadTaskScheduler โ แแกแ แฃแแแแก Tasks แแแแแแแแ แ แแแแแจแ
- LimitedConcurrencyLevelTaskScheduler โ แแฆแฃแแแแก แแ แแแ แแฃแแแ แจแแกแ แฃแแแแฃแ แแแแชแแแแแแก แ แแแแแแแแแก N แแแ แแแแขแ แแ, แ แแแแแแช แแแฆแแแฃแแแ แแแแกแขแ แฃแฅแขแแ แจแ
- OrderedTaskScheduler โ แแแแแกแแแฆแแ แแแ, แ แแแแ แช LimitedConcurrencyLevelTaskScheduler(1), แแแแขแแ แแแแแแแแแแ แจแแกแ แฃแแแแแ แแแแแแแแแแ แแแแ.
- WorkStealingTaskScheduler - แแฎแแ แชแแแแแแก
แกแแแฃแจแแแก แฅแฃแ แแแแ แแแแชแแแแแแก แแแแแฌแแแแแแก แแแแแแแ. แแ แกแแแแแแ, แแก แแ แแก แชแแแแ ThreadPool. แฌแงแแแขแก แแ แแแแแแแก, แ แแ .NET ThreadPool-แจแ แแ แแก แกแขแแขแแแฃแ แ แแแแกแ, แแ แแ แงแแแแ แแแแแแแชแแแกแแแแก, แ แแช แแแจแแแแก, แ แแ แแ แแแ แแแแก แแ แ แแแฌแแแจแ แแแกแแ แแแแแขแแแ แแแแ แแ แแ แแกแฌแแ แแ แแแแแงแแแแแแ แจแแแซแแแแ แแแแแแฌแแแแก แแแแ แแแแ แแแแแแแแแ แแแแ แแจแ. แฃแคแ แ แแแขแแช, แฃแแแแฃแ แแกแแ แ แแฃแแแ แแแแแแ แ แแแคแแฅแขแแแแก แแแแแแแก แแแแแแ. แ แแ. แจแแกแแซแแแ แกแแญแแ แ แแแฎแแแก แชแแแแ WorkStealingTaskScheduler-แแก แแแแแงแแแแแ แแ แแแ แแแแก แแแฌแแแแแจแ, แกแแแแช ThreadPool-แแก แแแแแงแแแแแ แจแแแซแแแแ แแงแแก แแแ แแกแแฃแแ แแ แแ แแแ แแแแแแแ แแแแแ. - QueuedTaskScheduler โ แกแแจแฃแแแแแแก แแแซแแแแ แจแแแกแ แฃแแแ แแแแแแแแแแ แแ แแแ แแขแแขแฃแแ แ แแแแก แฌแแกแแแแก แแแฎแแแแแ
- ThreadPerTaskScheduler โ แฅแแแแก แชแแแแ แแแแแก แงแแแแแ แแแแชแแแแกแแแแก, แ แแแแแแช แจแแกแ แฃแแแแฃแแแ แแแกแแ. แจแแแซแแแแ แกแแกแแ แแแแแ แแงแแก แแแแชแแแแแแกแแแแก, แ แแแแแแ แจแแกแ แฃแแแแแกแแช แแ แแแ แแแแแแแ แแแแ แแแแ แแ แ แกแญแแ แแแแ.
แแ แแก แแแ แแ แแแขแแแ
Tasks-แแแ แแแแแแจแแ แแแฃแแ แงแแแแแคแ แแก แแแกแแฎแแ แฎแแแแแ แแแแแ แแแแกแแแแก, Visual Studio-แก แแฅแแก Tasks แคแแแฏแแ แ. แแ แคแแแฏแแ แแจแ แจแแแแซแแแแ แแฎแแแแ แแแแชแแแแก แแแแแแแแ แ แแแแแแแ แแแแ แแ แแแแแฎแแแแแ แแแแแก แแแแแแแ แจแแแกแ แฃแแแแแ แฎแแแแ.
PLinq แแ แแแ แแแแแฃแ แ แแแแกแ
Tasks-แแกแ แแ แแแ แจแแกแแฎแแ แแแแฅแแแแแก แแแ แแ, .NET-แจแ แแ แแก แแแแแ แแ แ โโแกแแแแขแแ แแกแ แแแกแขแ แฃแแแแขแ: PLinq (Linq2Parallel) แแ Parallel แแแแกแ. แแแ แแแแ แแแแแ แแแแ แงแแแแ Linq แแแแ แแชแแแแแก แแแ แแแแแฃแ แจแแกแ แฃแแแแแก แแ แแแแ แซแแคแแ. แซแแคแแแแก แ แแแแแแแแแก แแแแคแแแฃแ แแชแแ แจแแกแแซแแแแแแแ WithDegreeOfParallelism แแแคแแ แแแแแแก แแแแแแแก แแแแแงแแแแแแ. แกแแแฌแฃแฎแแ แแ, แงแแแแแแ แฎแจแแ แแ PLinq-แก แแแแฃแแแกแฎแแแ แ แแแแแจแ แแ แแฅแแก แกแแแแแ แแกแ แแแคแแ แแแชแแ แแฅแแแแ แแแแแชแแแแ แฌแงแแ แแก แจแแแ แแแฌแแแแแแก แจแแกแแฎแแ, แ แแแ แฃแแ แฃแแแแแงแแก แแแแจแแแแแแแแแ แกแแฉแฅแแ แแก แแแแแขแแแ, แแแแ แแก แแฎแ แแ, แแชแแแแแแแก แฆแแ แแแฃแแแแ แซแแแแแ แแแแแแแ: แแฅแแแ แฃแแ แแแแ แฃแแแ แแแแแแซแแฎแแ AsParallel แแแแแแ. Linq แแแแแแแแแก แฏแแญแแ แแ แจแแกแ แฃแแแแแก แขแแกแขแแแ. แแแ แแ แแแแกแ, แจแแกแแซแแแแแแแ PLinq-แก แแแแแขแแแแแ แแแคแแ แแแชแแแก แแแแแชแแแ แแฅแแแแ แแแแแชแแแแ แฌแงแแ แแก แแฃแแแแแก แจแแกแแฎแแ Partitions แแแฅแแแแแแแก แแแแแงแแแแแแ. แจแแแแซแแแแ แแแขแ แฌแแแแแแฎแแ
Parallel แกแขแแขแแแฃแ แ แแแแกแ แฃแแ แฃแแแแแงแแคแก แแแแแแแแก Foreach-แแก แแแแแฅแชแแแก แแแ แแแแแฃแ แแ แแแแแแ แแแแกแแแแก, For แแแ แงแฃแแแก แจแแกแแกแ แฃแแแแแแ แแ แ แแแแแแแแ แแแแแแแขแแก แแแ แแแแแฃแ แแ Invoke-แแก แจแแกแแกแ แฃแแแแแแ. แแแแแแแแ แ แแแแแก แจแแกแ แฃแแแแ แจแแฉแแ แแแแ แแแแแแแแแแแก แแแกแ แฃแแแแแแแ. แซแแคแแแแก แ แแแแแแแแแก แแแแคแแแฃแ แแชแแ แจแแกแแซแแแแแแแ แแแแ แแ แแฃแแแแขแแ ParallelOptions-แแก แแแแแชแแแแ. แแฅแแแ แแกแแแ แจแแแแซแแแแ แแแฃแแแแแ TaskScheduler แแ CancellationToken แแแ แแแแขแ แแแแก แแแแแงแแแแแแ.
แแแกแแแแแแ
แ แแแแกแแช แแแแแฌแงแ แแ แกแขแแขแแแก แฌแแ แ แฉแแแ แแแฎแกแแแแแแก แแแกแแแแแแ แแ แแแก แจแแแแแแ แแฃแจแแแแแก แแ แแก แจแแแ แแแแแฃแแ แแแคแแ แแแชแแแก แกแแคแฃแซแแแแแ, แแ แแแแแแ, แ แแ แแแแแแ แแฅแแแแแแ. แแฎแแ, แ แแแแกแแช แขแแฅแกแขแแก แ แแแแฅแขแแ แ, แ แแแแแจแแช แแ แแแแญแแแ แแ แกแขแแขแแแก แกแแงแแแแฃแ แแ แแแขแงแแแก, แ แแ แแ-15 แแแแ แแ แฌแแแแแ, แแ แจแแแแฏแแแแ แจแฃแแแแแฃแ แจแแแแแแแก. แกแฎแแ แฎแ แแแแแก, API-แแแก, แแแแฃแแแฃแ แแแกแขแ แฃแแแแขแแแก แแ แฎแ แแแแแก แแแแแฎแแแแแก แจแแแแแ แกแขแแขแแแจแ.
แแแกแแแแแแ:
- แแฅแแแ แฃแแแ แแชแแแแ แซแแคแแแแแ แแฃแจแแแแแก แแแกแขแ แฃแแแแขแแแ, แแกแแแฅแ แแแฃแแแแ แแ แแแ แแแแแแแแ, แ แแแ แแแแแแงแแแแ แแแแแแแแ แแแ แแแแแแฃแขแแ แแแแก แ แแกแฃแ แกแแแ.
- .NET-แก แแฅแแก แแ แแแแแ แแแแกแฎแแแแแแฃแแ แแแกแขแ แฃแแแแขแ แแ แแแแแแแแกแแแแแก
- แงแแแแ แแแแแแแ แแ แแแ แแฃแแแ แแ แแแแแฉแแแ, แแกแ แ แแ, แฎแจแแ แแ แจแแแแซแแแแ แแแแแแ แแแแแแแแ แแแแแแ, แแฃแแชแ, แแ แกแแแแแก แซแแแแ API-แแแแก แแแ แแแฅแแแแก แแแแแ แแแแ แซแแแแกแฎแแแแแก แแแ แแจแ.
- .NET-แจแ แซแแคแแแแแ แแฃแจแแแแ แฌแแ แแแแแแแแแแ Thread แแ ThreadPool แแแแกแแแแ
- Thread.Abort, Thread.Interrupt แแ Win32 API TerminateThread แแแแแแแแ แกแแจแแจแแ แแ แแ แแ แแก แ แแแแแแแแแแฃแแ แแแแแกแแงแแแแแแแ. แแแแก แแแชแแแแ, แฃแแฏแแแแกแแ แแแแแแงแแแแ CancellationToken แแแฅแแแแแแ
- แแแแแแ แฆแแ แแแฃแแ แ แแกแฃแ แกแแ แแ แแแกแ แแแฌแแแแแ แจแแแฆแฃแแฃแแแ. แแแแแแแ แฃแแแ แแฅแแแก แแชแแแแแฃแแ แกแแขแฃแแชแแแแ, แกแแแแช แแแแ แแ แแก แแแแแแแแฃแแ แแแแแแแแแแก แแแแแแแแจแ. แแแแกแแแแก แแแกแแฎแแ แฎแแแแแแ TaskCompletionSource แแแแกแแก แแแแแงแแแแแ
- แงแแแแแแ แซแแแแ แ แแ แแแฌแแแแแ .NET แแแกแขแ แฃแแแแขแแแ แแแ แแแแแแแแแแ แแ แแกแแแฅแ แแแแแกแแแ แแฃแจแแแแแกแแแแก แแ แแก Tasks.
- c# async/wait แแแแ แแขแแ แแแ แแฎแแ แชแแแแแแแ แแ แแแแแแแแแแก แแแแแแแก แแแแชแแคแชแแแก
- แแฅแแแ แจแแแแซแแแแ แแแแแขแ แแแแ Tasks-แแก แแแแแฌแแแแแ แซแแคแแแจแ, TaskScheduler-แแกแแแ แแแฆแแแฃแแ แแแแกแแแแก แแแแแงแแแแแแ
- ValueTask แกแขแ แฃแฅแขแฃแ แ แจแแแซแแแแ แกแแกแแ แแแแแ แแงแแก แชแฎแแแ แแแแแแกแ แแ แแแฎแกแแแ แแแแก แขแ แแคแแแแก แแแขแแแแแแชแแแกแแแแก
- Visual Studio-แแก Tasks แแ Threads แคแแแฏแ แแแ แแแแแแแแแ แฃแแแ แแ แแแคแแ แแแชแแแก, แ แแแแแแช แกแแกแแ แแแแแแ แแ แแแแ แแแแแแแแแ แแ แแกแแแฅแ แแแฃแแ แแแแแก แแแแแ แแแแกแแแแก.
- PLinq แแแแแ แ แแแกแขแ แฃแแแแขแแ, แแแแ แแ แแแก แจแแแซแแแแ แแ แฐแฅแแแแแก แกแแแแแ แแกแ แแแคแแ แแแชแแ แแฅแแแแ แแแแแชแแแแ แฌแงแแ แแก แจแแกแแฎแแ, แแแแ แแ แแแแก แแแแแกแฌแแ แแแ แจแแกแแซแแแแแแแ แแแแแงแแคแแก แแแฅแแแแแแแก แแแแแงแแแแแแ
- แแแแ แซแแแแแ แแฅแแแแ ...
แฌแงแแ แ: www.habr.com