.NET: แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒ แƒแƒ•แƒแƒšแƒ—แƒ แƒ”แƒแƒ“แƒ˜แƒœแƒ’แƒ—แƒแƒœ แƒ“แƒ แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒแƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แฒœแƒแƒฌแƒ˜แƒšแƒ˜ 1

แƒ•แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘ แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ  แƒกแƒขแƒแƒขแƒ˜แƒแƒก แƒฐแƒแƒ‘แƒ แƒ–แƒ”, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ™แƒแƒ แƒžแƒแƒ แƒแƒขแƒ˜แƒฃแƒšแƒจแƒ˜ แƒ‘แƒšแƒแƒ’แƒ˜แƒก แƒžแƒแƒกแƒขแƒ˜.

แƒ แƒแƒฆแƒแƒชแƒ˜แƒก แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒแƒ“ แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ, แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒก แƒ›แƒแƒšแƒแƒ“แƒ˜แƒœแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒแƒฅ แƒ“แƒ แƒแƒฎแƒšแƒ, แƒแƒœ แƒ“แƒ˜แƒ“แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒก แƒ’แƒแƒงแƒแƒคแƒ แƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ”แƒš แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ–แƒ”, แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒ•แƒšแƒแƒ›แƒ“แƒ”. แƒ›แƒแƒ—แƒ˜ แƒ›แƒแƒกแƒ•แƒšแƒแƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“ แƒ”แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒฎแƒ”แƒšแƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘แƒ˜ แƒ’แƒแƒฎแƒ“แƒ. แƒแƒฎแƒšแƒ, 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 แƒแƒฆแƒ˜แƒฅแƒ•แƒแƒ›แƒ”แƒœ แƒ แƒแƒ’แƒแƒ แƒช แƒ แƒ”แƒ™แƒแƒ›แƒ”แƒœแƒ“แƒแƒชแƒ˜แƒแƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒแƒ แƒ˜แƒก แƒ“แƒ แƒแƒ˜แƒก แƒซแƒแƒคแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒ’แƒแƒงแƒแƒคแƒ˜แƒกแƒแƒก.

.NET: แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒ แƒแƒ•แƒแƒšแƒ—แƒ แƒ”แƒแƒ“แƒ˜แƒœแƒ’แƒ—แƒแƒœ แƒ“แƒ แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒแƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แฒœแƒแƒฌแƒ˜แƒšแƒ˜ 1

แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ แƒแƒšแƒ”แƒšแƒฃแƒ แƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ

แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒžแƒแƒ แƒแƒšแƒ”แƒšแƒฃแƒ แƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ (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 โ€” แƒฅแƒ›แƒœแƒ˜แƒก แƒชแƒแƒšแƒ™แƒ” แƒ—แƒ”แƒ›แƒแƒก แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒแƒกแƒ–แƒ”. แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ˜แƒงแƒแƒก แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒกแƒแƒช แƒแƒ แƒแƒžแƒ แƒแƒ’แƒœแƒแƒ–แƒ˜แƒ แƒ”แƒ‘แƒแƒ“ แƒ“แƒ˜แƒ“แƒ˜ แƒ“แƒ แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ.

แƒแƒ แƒ˜แƒก แƒ™แƒแƒ แƒ’แƒ˜ แƒ“แƒ”แƒขแƒแƒšแƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก TaskScheduler-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ microsoft แƒ‘แƒšแƒแƒ’แƒ–แƒ”.

Tasks-แƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, Visual Studio-แƒก แƒแƒฅแƒ•แƒก Tasks แƒคแƒแƒœแƒฏแƒแƒ แƒ. แƒแƒ› แƒคแƒแƒœแƒฏแƒแƒ แƒแƒจแƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ แƒ“แƒ แƒ’แƒแƒ“แƒแƒฎแƒ•แƒ˜แƒ“แƒ”แƒ— แƒ™แƒแƒ“แƒ˜แƒก แƒแƒ›แƒŸแƒแƒ›แƒแƒ“ แƒจแƒ”แƒ›แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ”แƒš แƒฎแƒแƒ–แƒ–แƒ”.

.NET: แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒ แƒแƒ•แƒแƒšแƒ—แƒ แƒ”แƒแƒ“แƒ˜แƒœแƒ’แƒ—แƒแƒœ แƒ“แƒ แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒแƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แฒœแƒแƒฌแƒ˜แƒšแƒ˜ 1

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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ