.NET: рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгред рднрд╛рдЧ 1

рдореИрдВ рд╣реЗрдмрд░ рдкрд░ рдореВрд▓ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЛрдбрд┐рдВрдЧрд╕рд╛рдЗрдЯ рдмреНрд▓реЙрдЧ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рджреВрд╕рд░рд╛ рднрд╛рдЧ рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИред

рдпрд╣рд╛рдБ рдФрд░ рдЕрднреА рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдИ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рдо рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдЖрдЧрдорди рд╕реЗ рдкрд╣рд▓реЗ рднреА рдерд╛ред рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде, рдЗрд╕ рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдмрд╣реБрдд рдореВрд░реНрдд рд╣реЛ рдЧрдИ рд╣реИред рдЕрдм, 2019 рдореЗрдВ, 8-рдХреЛрд░ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рд▓реИрдкрдЯреЙрдк рдкрд░ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдирд╛, рдЬрд┐рд╕ рдкрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╕реМ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдереНрд░реЗрдбред рдЗрд╕рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдПрдХ рдереЛрдбрд╝рд╛ рдмреИрдЯрд░ рдлреЛрди рд╣реИ, рдЬрд┐рд╕реЗ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЦрд░реАрджрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ 8-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓рдЧрд╛ рдерд╛ред рд╡рд┐рд╖рдпрдЧрдд рд╕рдВрд╕рд╛рдзрди рд▓реЗрдЦреЛрдВ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВ рдЬрд╣рд╛рдБ рдЙрдирдХреЗ рд▓реЗрдЦрдХ рдЗрд╕ рд╕рд╛рд▓ рдХреЗ рдкреНрд░рдореБрдЦ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЙрдиреНрд╣реЛрдВрдиреЗ 16-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓рдЧрд╛рдП рд╣реИрдВред $ 20 / рдШрдВрдЯрд╛ рд╕реЗ рдХрдо рд╕рдордп рдХреЗ рд▓рд┐рдП, MS Azure 128 рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ 2 рдЯреАрдмреА рд░реИрдо рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░рд╡рд╛рд╣ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рд╢рдХреНрддрд┐ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдирд╛ рдФрд░ рдЙрд╕ рдкрд░ рдЕрдВрдХреБрд╢ рд▓рдЧрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

рд╢рдмреНрджрд╛рд╡рд▓реА


рдкреНрд░рдХреНрд░рд┐рдпрд╛ - рдПрдХ рдУрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ, рдПрдХ рдЕрд▓рдЧ рдкрддрд╛ рд╕реНрдерд╛рди, рдЬрд┐рд╕рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред
рдереНрд░реЗрдб (рдереНрд░реЗрдб) - рдПрдХ рдУрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ, рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдЗрдХрд╛рдИ, рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛, рдереНрд░реЗрдбреНрд╕ рд╕реНрдореГрддрд┐ рдФрд░ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднреАрддрд░ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдПрдХ рдУрдПрд╕ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ
рдорд▓реНрдЯреАрдХреЛрд░ - рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐, рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдИ рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ - рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рд╕рдВрдкрддреНрддрд┐, рдПрдХ рд╕рд╛рде рдХрдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдЬреЛ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред
рд╕рдорд╛рдирд╛рдВрддрд░рд╡рд╛рдж - рд╕рдордп рдХреА рдкреНрд░рддрд┐ рдЗрдХрд╛рдИ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрдИ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдирд╛
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ - рдЗрд╕ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдВрдд рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди, рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрд╛рдж рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд░реВрдкрдХ


рд╕рднреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдЕрдЪреНрдЫреА рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХреА рдЧрдИ рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдЦрд╛рдирд╛ рдкрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрдХ рдЬреЛрдбрд╝реВрдВрдЧрд╛ред рдЗрд╕ рд░реВрдкрдХ рдореЗрдВ рдирд╛рд╢реНрддрд╛ рдкрдХрд╛рдирд╛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред

рд╕реБрдмрд╣ рдХрд╛ рдирд╛рд╢реНрддрд╛ рдореИрдВ ( рд╕реАрдкреАрдпреВ ) рд░рд╕реЛрдИ ( рдХрдВрдкреНрдпреВрдЯрд░ ) рдкрд░ рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░реЗ 2 рд╣рд╛рде ( рдХреЛрд░реЗ ) рд╣реИрдВред рд░рд╕реЛрдИ рдореЗрдВ рдХрдИ рдЙрдкрдХрд░рдг ( IO ) рд╣реИрдВ: рдУрд╡рди, рдХреЗрддрд▓реА, рдЯреЛрд╕реНрдЯрд░, рд░реЗрдлреНрд░рд┐рдЬрд░реЗрдЯрд░ред рдореИрдВ рдЧреИрд╕ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реВрдВ, рдЙрд╕ рдкрд░ рдПрдХ рдлреНрд░рд╛рдЗрдВрдЧ рдкреИрди рдбрд╛рд▓рддрд╛ рд╣реВрдВ рдФрд░ рд╡рд╣рд╛рдВ рддреЗрд▓ рдбрд╛рд▓рддрд╛ рд╣реВрдВ, рдЬрдм рддрдХ рд╡рд╣ рдЧрд░реНрдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ ( asynchronously, Non-Blocking-IO-Wait ), рдореИрдВ рдЕрдВрдбреЗ рдХреЛ рд░реЗрдлреНрд░рд┐рдЬрд░реЗрдЯрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкреНрд▓реЗрдЯ рдореЗрдВ рддреЛрдбрд╝рддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣рд╛рде рд╕реЗ рд╣рд░рд╛рддрд╛ рд╣реВрдВ ( рдереНрд░реЗрдб # 1 # ), рдФрд░ рджреВрд╕рд░рд╛ ( рдереНрд░реЗрдб # 2 ) рдореИрдВ рдкреНрд▓реЗрдЯ (рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди) рд░рдЦрддрд╛ рд╣реВрдВред рдЕрдм рдореИрдВ рдХреЗрддрд▓реА рдЪрд╛рд▓реВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рд╣рд╛рде рдирд╣реАрдВ рд╣реИрдВ ( рдереНрд░реЗрдб рднреБрдЦрдорд░реА ) рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, рдлреНрд░рд╛рдЗрдВрдЧ рдкреИрди рдХреЛ рдЧрд░реНрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ) рдЬрд╣рд╛рдВ рдореИрдВ рд╡рд╣реА рдбрд╛рд▓рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВрдиреЗ рд╡реНрд╣реАрдкреНрдб рдХрд┐рдпрд╛ рдерд╛ред рдореИрдВ рдХреЗрддрд▓реА рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдмреЗрд╡рдХреВрдлреА рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдкрд╛рдиреА рдХреИрд╕реЗ рдЙрдмрд▓рддрд╛ рд╣реИ ( рдмреНрд▓реЙрдХрд┐рдВрдЧ-рдЖрдИрдУ-рд░реБрдХреЛ ), рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдкреНрд▓реЗрдЯ рдзреЛ рд╕рдХрддрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдЖрдорд▓реЗрдЯ рдХреЛ рд╣рд░рд╛рдпрд╛ред

рдореИрдВрдиреЗ рдХреЗрд╡рд▓ 2 рд╣рд╛рдереЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЖрдорд▓реЗрдЯ рдкрдХрд╛рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рдСрдорд▓реЗрдЯ рдХреЛ рд╡реНрд╣рд┐рдк рдХрд░рдиреЗ рдХреЗ рдХреНрд╖рдг рдореЗрдВ 3 рдСрдкрд░реЗрд╢рди рдХрд┐рдП рдЧрдП рдереЗ: рдПрдХ рдСрдорд▓реЗрдЯ рдХреЛ рд╡реНрд╣рд┐рдк рдХрд░рдирд╛, рдПрдХ рдкреНрд▓реЗрдЯ рдХреЛ рдкрдХрдбрд╝рдирд╛, рдПрдХ рдлреНрд░рд╛рдЗрдВрдЧ рдкреИрди рдХреЛ рдЧрд░реНрдо рдХрд░рдирд╛ред рд╕реАрдкреАрдпреВ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, IO рдпрд╣ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣реИред рд╕рдм рдХреБрдЫ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдХреНрд╕рд░ IO рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ CPU рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рднрд╛рд╡реА рд╕рдорд╛рдзрд╛рди рд╣реИред

рд░реВрдкрдХ рдЬрд╛рд░реА рд░рдЦрдирд╛:

  • рдпрджрд┐ рдПрдХ рдЖрдорд▓реЗрдЯ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдХрдкрдбрд╝реЗ рдмрджрд▓рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рддреЛ рдпрд╣ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░: рдЗрд╕рдХреЗ рд╕рд╛рде рдХрдВрдкреНрдпреВрдЯрд░ рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИрдВред
  • рдХрдИ рд╢реЗрдл рдХреЗ рд╕рд╛рде рдПрдХ рд░рд╕реЛрдИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЗрд╕реНрддрд░рд╛рдВ рдореЗрдВ, рдПрдХ рдорд▓реНрдЯреА-рдХреЛрд░ рдХрдВрдкреНрдпреВрдЯрд░ рд╣реИред
  • рдПрдХ рд╢реЙрдкрд┐рдВрдЧ рд╕реЗрдВрдЯрд░ рдореЗрдВ рдХрдИ рдлреВрдб рдХреЛрд░реНрдЯ рд░реЗрд╕реНрддрд░рд╛рдВ - рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░

.NET рдЙрдкрдХрд░рдг


рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ, рдХрдИ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреА рддрд░рд╣, .NET рдЕрдЪреНрдЫрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде, рд╡рд╣ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирдП рдЙрдкрдХрд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рдУрдПрд╕ рдереНрд░реЗрдбреНрд╕ рдкрд░ рдЕрдореВрд░реНрддрддрд╛ рдХреА рдирдИ рдкрд░рддреЗрдВред рдЕрдореВрд░реНрдд рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ, рдлреНрд░реЗрдорд╡рд░реНрдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрдореВрд░реНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдВрднрд╛рд╡рдирд╛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдпрд╛ рдХрдИ рд╕реНрддрд░реЛрдВ рд╕реЗ рдиреАрдЪреЗ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдкреИрд░ рдореЗрдВ рдПрдХ рдмрдиреНрджреВрдХ рдХреА рдЧреЛрд▓реА рд▓рдЧрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА, рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдореВрд░реНрдд рдХреЗ рдореМрдЬреВрджрд╛ рд╕реНрддрд░ рдкрд░ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рджреЛрдиреЛрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрдВрдЯрд░рдлреЗрд╕ (рдПрдкреАрдЖрдИ), рдФрд░ рдПрдХ рд╕рдВрдкреВрд░реНрдг рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рд╕реЗ рдЬреБрдбрд╝реА рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХреА рдЦреЛрдЬ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред

рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ


рдереНрд░реЗрдб рдХреНрд▓рд╛рд╕, рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .NET рдореЗрдВ рд╕рдмрд╕реЗ рдмреЗрд╕рд┐рдХ рдХреНрд▓рд╛рд╕ред рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рджреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:

  • рдереНрд░реЗрдбрд╕реНрдЯрд╛рд░реНрдЯ - рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ
  • ParametrizedThreadStart - рдкреНрд░рдХрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рдеред

рд╕реНрдЯрд╛рд░реНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирдП рдмрдирд╛рдП рдЧрдП рдереНрд░реЗрдб рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдирд╛ рдПрдХ рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИ, рдФрд░ рд╕реНрдЯреНрд░реАрдо рд╣реА рдПрдХ рднрд╛рд░реА рд╡рд╕реНрддреБ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдХреНрдпреЛрдВрдХрд┐ 1MB рдореЗрдореЛрд░реА рд╕реНрдЯреИрдХ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдУрдПрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

new Thread(...).Start(...); 

рдереНрд░реЗрдбрдкреВрд▓ рд╡рд░реНрдЧ рдПрдХ рдкреВрд▓ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред .NET рдореЗрдВ, рдереНрд░реЗрдб рдкреВрд▓ рдХрд▓рд╛ рдХрд╛ рдПрдХ рдХрд╛рдо рд╣реИ рдФрд░ Microsoft рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛:

рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рдж рд╕реЗ, рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЖрд╡реЗрджрди рд░рд┐рдЬрд░реНрд╡ рдореЗрдВ рдХрдИ рдзрд╛рдЧреЗ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд▓реЗрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдереНрд░реЗрдбреНрд╕ рдЕрдХреНрд╕рд░ рдФрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреВрд▓ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреИрд▓рддрд╛ рд╣реИред рдЬрдм рд╕рд╣реА рд╕рдордп рдкрд░ рдкреВрд▓ рдореЗрдВ рдХреЛрдИ рдлреНрд░реА рдлреНрд▓реЛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рдлреНрд▓реЛ рдХреЗ рд▓реМрдЯрдиреЗ рдпрд╛ рдирдпрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рдереНрд░реЗрдб рдкреВрд▓ рдХреБрдЫ рдЫреЛрдЯреА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдЦрд░рд╛рдм рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рд╣реИ рдЬреЛ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдкреВрд▓ рд╕реЗ рдПрдХ рдереНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреНрд╡реЗрдпреВрд╕реЗрд╡рд░рд╡рд░реНрдХ рдЗрдЯреЗрдо рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдПрдХ WaitCallback рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬреЛ ParametrizedThreadStart рдХреЗ рд╕рдорд╛рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдЧрдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХрд░рддрд╛ рд╣реИред

 ThreadPool.QueueUserWorkItem(...); 

рдХрдо рдЬреНрдЮрд╛рдд рдереНрд░реЗрдб рдкреВрд▓ рд╡рд┐рдзрд┐ RegisterWaitForSingleObject рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз IO рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд░рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рддрдм рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╡реЗрдЯрд╣реИрдВрдбрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ "рдЬрд╛рд░реА"ред

 ThreadPool.RegisterWaitForSingleObject(...) 

.NET рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдЯрд╛рдЗрдорд░ рд╣реИ рдФрд░ рдпрд╣ WinForms / WPF рдЯрд╛рдЗрдорд░ рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкреВрд▓ рд╕реЗ рд▓реА рдЧрдИ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

 System.Threading.Timer 

рдкреВрд▓ рд╕реЗ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд▓реНрдХрд┐ рд╡рд┐рджреЗрд╢реА рддрд░реАрдХрд╛ рднреА рд╣реИ - рдмрд┐рдЧрд┐рдиреЙрдХ рд╡рд┐рдзрд┐ред

 DelegateInstance.BeginInvoke 

рдореИрдВ рдПрдХ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рднреА рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рдХрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ - CreateThread from Kernel32.dll Win32 API рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рддрд░реАрдХреЛрдВ рдХреЗ рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреБрдиреМрддреА рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдХреЗ рдПрдХ рднрдпрд╛рдирдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦрд╛, рдФрд░ рд▓реЗрдЦрдХ рдХреА рдкреНрд░реЗрд░рдгрд╛ рд╕рд┐рд░реНрдл рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд░рд╣рд╕реНрдп рд╣реИред

 Kernel32.dll CreateThread 

рдзрд╛рдЧреЗ рджреЗрдЦреЗрдВ рдФрд░ рдбреАрдмрдЧ рдХрд░реЗрдВ


рд╕рднреА рддреГрддреАрдп-рдкрдХреНрд╖ рдШрдЯрдХреЛрдВ рдФрд░ .NET рдкреВрд▓ рджреНрд╡рд╛рд░рд╛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдереНрд░реЗрдбреНрд╕ рдХреЛ рдереНрд░реЗрдбреНрд╕ Visual Studio рд╡рд┐рдВрдбреЛ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдВрдбреЛ рдХреЗрд╡рд▓ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреА рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рддрд╣рдд рдФрд░ рдмреНрд░реЗрдХ рдореЛрдб (рдмреНрд░реЗрдХ рдореЛрдб) рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд╕реНрдЯреИрдХ рдирд╛рдо рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдереНрд░реЗрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдереНрд░реЗрдб рд╡рд░реНрдЧ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдВрдкрддреНрддрд┐ рдЖрдкрдХреЛ рдереНрд░реЗрдб рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬреЛ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕реАрдкреАрдпреВ рд╕рдордп рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╕рдордп рдУрд╕реА рдФрд░ рд╕реАрдПрд▓рдЖрд░ рдПрдХ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрднрд╡ рдХрд░реЗрдВрдЧреЗред



рдЯрд╛рд╕реНрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп


рдЯрд╛рд╕реНрдХ рдкреИрд░реЗрд▓рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (TPL) .NET 4.0 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЕрдм рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдФрд░ рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рд╣реИред рдкреБрд░рд╛рдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред TPL рдХреА рдореВрд▓ рдЗрдХрд╛рдИ System.Threading.Tasks рдирд╛рдо рд╕реНрдерд╛рди рд╕реЗ рдХрд╛рд░реНрдп рд╡рд░реНрдЧ рд╣реИред рдЯрд╛рд╕реНрдХ рдПрдХ рдереНрд░реЗрдб рдкрд░ рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рд╣реИред C # рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдЯрд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрдВрджрд░ рддрд░реАрдХрд╛ рдорд┐рд▓ рдЧрдпрд╛ - async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдСрдкрд░реЗрдЯрд░ред рдЗрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдиреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╕рд░рд▓ рдФрд░ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдерд╛, рдЗрд╕рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдереНрд░реЗрдбреНрд╕ рдХреА рдЖрдВрддрд░рд┐рдХ рд░рд╕реЛрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╕рдордЭ рд░рдЦрддреЗ рд╣реИрдВ, рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬреЛ рд▓рдВрдмреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдлреНрд░реАрдЬ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдпрд╛ рдХрдИ рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреБрдЫ рд╡рд╛рдХреНрдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛:

  • async рдЯрд╛рд╕реНрдХ рдпрд╛ рд╢реВрдиреНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕рдВрд╢реЛрдзрдХ рд╣реИ
  • рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛рд░рдд рдЯрд╛рд╕реНрдХ рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╡рд┐рд╡рд░рдг рд╣реИред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░: рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдСрдкрд░реЗрдЯрд░, рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ (рдЕрдкрд╡рд╛рдж рд╣реИрдВ), рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╡рд░реНрддрдорд╛рди рдзрд╛рдЧреЗ рдХреЛ рдЖрдЧреЗ рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЬрдм рдЯрд╛рд╕реНрдХ рдЕрдкрдиреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджрд░реНрдн рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдзрд╛рдЧрд╛ (рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЙрд╕ рддрд░реАрдХреЗ рдХреЛ рдЖрдЧреЗ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдЧрд╛ред .NET рдХреЗ рдЕрдВрджрд░, рдпрд╣ рддрдВрддреНрд░ рдЙрд╕реА рддрд░рд╣ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдкреИрджрд╛рд╡рд╛рд░ рд╡рд╛рдкрд╕реА, рдЬрдм рдПрдХ рд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдПрдХ рдкреВрд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рд╣реИ рдФрд░ рдЗрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдХреЛрдИ рднреА рдЗрдЪреНрдЫреБрдХ asyn / рдкреНрд░рддреАрдХреНрд╖рд╛, рд╕рдВрдХрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдИ рднреА рд╕рд░рд▓ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЗ рд╕рд╛рде JetBrains dotPeek рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред

рдЯрд╛рд╕реНрдХ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ ( рдереНрд░реЗрдбред рд╕реЛрд▓реЗрдк (10000) ), рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЬрдЯрд┐рд▓ CPU-рдпреБрдХреНрдд рдХрд╛рд░реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

 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 } 

рдХрд╛рд░реНрдп рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • LongRunning рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдЬрд▓реНрджреА рд╕реЗ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд▓ рд╕реЗ рдПрдХ рдзрд╛рдЧрд╛ рдирд╣реАрдВ рд▓реЗрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреЛ рдиреБрдХрд╕рд╛рди рди рдкрд╣реБрдВрдЪреЗред
  • рд╕рдВрд▓рдЧреНрдирдХ - рдЯрд╛рд╕реНрдХ рдХреЛ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЯрд╛рд╕реНрдХ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рд╕реНрд╡рдпрдВ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рдмрдЪреНрдЪреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реЛред
  • рдЕрдзрд┐рдорд╛рдиреНрдпрддрд╛ - рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рднреЗрдЬреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрди рдкрд░ рдЕрдорд▓ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдмрд╛рдж рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдереЗред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред

рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд░рджреНрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рдСрдкрд░реЗрд╢рди рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреЛрдб рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рднрд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдХреЛрдИ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рд░рджреНрджреАрдХрд░рдг рд╡рд┐рдзрд┐ рдХреЛ рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рджреНрдж рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЯрд╛рд╕реНрдХ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧреАред

рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреИрдбреНрдпреВрд▓рд░ рдХреЗ рд╢реЗрдбреНрдпреВрд▓рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ред рдпрд╣ рд╡рд░реНрдЧ рдФрд░ рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬ рдЯрд╛рд╕реНрдХ'рд╡ рдХреЛ рдзрд╛рдЧреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЯрд╛рд╕реНрдХ рдХреЛ рдкреВрд▓ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдереНрд░реЗрдб рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмрдирд╛рдИ рдЧрдИ рдЯрд╛рд╕реНрдХ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдмрд╛рдж рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдХреЛ рдЙрд╕реА рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЕрдХреНрд╕рд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕реА рдереНрд░реЗрдб рдкрд░ рд╣реИ) рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВред

рд╡рд┐рдзрд┐ рдХреЛ async рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдХреЛ рдЯрд╛рд╕реНрдХ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред Async рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рддрд░реАрдХреЗ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ: рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпреЗ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдпрд╛ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдЖрдЧ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдкрд░рд┐рдгрд╛рдо рднреА рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЯрд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдкреНрд░рд╛рд░рдВрднрди рд╡рд┐рдзрд┐ рдЬрд┐рд╕ рдЯрд╛рд╕реНрдХ рдкрд░ рд▓реМрдЯреА рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдХрдиреНрдлрд╝рд┐рдЧрд░рд╡рд╛рдЗрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдЧрд▓рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрди рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдордирдорд╛рдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ред рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдПрдордПрд╕ рд╕реЗ рдпрд╣ рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЖрдЗрдП рдереЛрдбрд╝рд╛ рдФрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдЖрдк рдЯрд╛рд╕реНрдХ рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдПрдХ рдирдореВрдирд╛ рдХреЛрдб рд╣реИ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЬрдм рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЬрдм рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рд╣реЛрддреА рд╣реИред

 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 } 

рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЯрд╛рд╕реНрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдП рдмрд┐рдирд╛, рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрднреА рд▓реМрдЯреЗрдВрдЧреЗ рдЬрдм рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЛ, рдЬрдм рддрдХ рдХрд┐ рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ, рд╣рдо рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рди рдХреЗрд╡рд▓ рдмреБрд░рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдереНрд░реЗрдб рд▓рд┐рдпрд╛ рдерд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдРрд╕рд╛ рдореВрд▓реНрдпрд╡рд╛рди рд╕рдВрд╕рд╛рдзрди, рд╕рд░рд▓ рдЖрд▓рд╕реНрдп рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд╣рдо рдЬрд┐рд╕ рд╡рд┐рдзрд┐ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЙрд▓ рдереНрд░реЗрдб рдореЗрдВ рд▓реМрдЯрдиреЗ рдХреЗ рдмрд╛рдж рд╡рд╛рдкрд╕ рдЖрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЧрддрд┐рд░реЛрдз рдорд┐рд▓реЗрдЧрд╛ред : рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐ рд╡реНрдпрд░реНрде рдореЗрдВ рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдореЗрдВ рдЕрдкрдиреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИред

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рдФрд░ рджреЛрд╖ рдЬрдЯрд┐рд▓ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ / рд╡реЗрдЯ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ - рд╡реЗ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдб рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдерд╛ред рдЬрдмрдХрд┐, рдпрджрд┐ рд╣рдо рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЛрдХреНрд░рд┐рдЬрд╝реНрдо, рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореВрд▓ рдЕрдкрд╡рд╛рдж рдПрдХ рдПрдЧреНрд░реАрдЧреЗрдЯрдПрдХреНрд╕реИрд╕реЗрдкреНрд╢рди рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрдирд░ рдПрдХреНрд╕реЗрдкреНрд╢рди рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реЛрдЧреА рдФрд░ рдпрджрд┐ рдПрдХ рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдЪреЗрди рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ C # рдореЗрдВ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдХреИрдЪ рдмреНрд▓реЙрдХ рдЪреЗрди рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рддреАрд╕рд░реЗ рдФрд░ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдХреЛ рднреА рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдЦрд░рд╛рдм рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рднреА рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред

рдЬрдм рдЯрд╛рд╕реНрдХ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рдЗрдВрддрдЬрд╛рд░ рдореЗрдВ рд╣рдиреА рдФрд░ рдЬрдм рд╕рднреА рддрд░реАрдХреЗ рдмреЗрд╣рдж рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЯрд╛рд╕реНрдХрдУрд╡ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЛ рдПрдХ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рдЬреЛ рдпрд╛ рддреЛ рд╕рдореВрд╣ рд╕реЗ рдЯрд╛рд╕реНрдХ рдХреЗ рдкрд╣рд▓реЗ рдСрдкрд░реЗрд╢рди рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдпрд╛ рдЬрдм рд╕рднреА рдЕрдкрдирд╛ рдирд┐рд╖реНрдкрд╛рджрди рдкреВрд░рд╛ рдХрд░ рд▓реЗрдВрдЧреЗред

рдкреНрд░рд╡рд╛рд╣ рдмрдВрдж рдХрд░реЛ


рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдЗрд╕рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдзрд╛рд░рд╛ рдХреЛ рд░реЛрдХрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдереНрд░реЗрдб рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдирд╛рдо рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ - рдПрдмреЙрд░реНрдЯ рдФрд░ рдЗрдВрдЯрд░рдкреНрдЯ ред рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд╖рдг рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди, рдПрдХ рдереНрд░реЗрдбрдмреНрд░реЗрдбрдПрдХреНрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдм рдЖрдк рдкреВрд░реНрдгрд╛рдВрдХ рдЪрд░ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣реИ рдирд╛? рдФрд░ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИред рдпрджрд┐ рдЖрдк рд╕реАрдПрд▓рдЖрд░ рдХреЛ рдХреЛрдб рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЦрдВрдб рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдереНрд░реЗрдб.рдмрд┐рдЬрд┐рдирдХреНрд░рд┐рдЯрд┐рдХрд▓рд░рд╛рдЗрдЬреЗрд╢рди , рдереНрд░реЗрдб.рдЗрдВрдбрдХреНрд░рд┐рдЯрд┐рдХрд▓рд░реИрдЧрд┐рдпрди рдореЗрдВ рдХреЙрд▓ рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рдХреЛрдб рдРрд╕реА рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд▓рд┐рдкрдЯрд╛ рд░рд╣рддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рдХреЛрдб рдХреЗ рдЖрдВрддреЛрдВ рдореЗрдВ, рдЖрдк рдПрдХ рдЦрд╛рд▓реА рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдЦрд╛рд▓реА рдирд╣реАрдВред Microsoft рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ .net рдХреЛрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдЗрдВрдЯрд░рдкреНрдЯ рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХ рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдереНрд░реЗрдб рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдереНрд░реЗрдбрдЗрдВрдЯрд░рдиреЗрдЯреЗрдб рдЕрдкрд╡рд╛рдж рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдереНрд░реЗрдб рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рд╡реЗрдЯрд╣реИрдВрдбрд▓, рд▓реЙрдХ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рд╕реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд▓рдВрдмрди рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рдЙрдирдХреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рддрддрд╛ рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рд╣реИрдВред рд╕рдорд╛рдзрд╛рди рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХреЗрди рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХреЗрдирд╕реЛрд░реНрд╕ рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ: рд░рджреНрджреАрдХрд░рдг рд╢реНрд░реЗрдгреА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреИрдВрд╕рд┐рд▓реЗрд╢рди рдЯреЛрдХреЗрдирд╕реЛрд░реНрд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рд╡рд╣ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдЗрд╕рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ рд╡рд╣ рд░рджреНрдж рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдХреИрдВрд╕рд┐рд▓реЗрд╢рдирдЯреЛрдХрди рдХреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╣реА рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рджреНрджреАрдХрд░рдг рдХреЗ рдорд╛рд▓рд┐рдХреЛрдВ рдХреЛ рдСрдкрд░реЗрд╢рди рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдСрдкрд░реЗрд╢рди рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмреВрд▓рд┐рдпрди рд╕рдВрдкрддреНрддрд┐ IsCancellationRequested рдФрд░ ThrowIfCancelRequested рд╡рд┐рдзрд┐ рд╣реИред рдпрджрд┐ рд░рджреНрдж рд╡рд┐рдзрд┐ рдХреЛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЯрд╛рд╕реНрдХрдХреИрдиреНрдбрд▓ рдПрдХреНрд╕реЗрдкреНрд╢рди рдмрдврд╝рд╛рдПрдЧрд╛ ред рдФрд░ рдпрд╣ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЕрдкрд╡рд╛рдж рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдХрд┐рди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдереНрд░реЗрдб рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдХреНрд░реВрд░ рд╡рд┐рдХрд▓реНрдк Win32 API рдЯрд░реНрдорд┐рдиреЗрдЯрд╣реНрд░реЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реАрдПрд▓рдЖрд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред MSDN рдкрд░, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ: "рдЯрд░реНрдорд┐рдиреЗрдЯрд╣реНрд░реЗрдб рдПрдХ рдЦрддрд░рдирд╛рдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред "

FromAsync рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд░рд╛рд╕рдд-рдПрдкреАрдЖрдИ рдХреЛ рдЯрд╛рд╕реНрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ


рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдереЗ рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╢рд╛рдВрдд рдЖрддрдВрдХ рдкреИрджрд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдерд╛, рддреЛ рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреЗ APIs, рддреГрддреАрдп-рдкрдХреНрд╖ рдФрд░ рдЖрдкрдХреА рдЯреАрдо рдХреЗ рдЕрддреАрдд рдореЗрдВ рдкреНрд░рддрд╛рдбрд╝рд┐рдд, рджреЛрдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреАрдо рдиреЗ рд╣рдорд╛рд░рд╛ рдзреНрдпрд╛рди рд░рдЦрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╢рд╛рдпрдж рд▓рдХреНрд╖реНрдп рдЦреБрдж рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред .NET рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдкреНрд░реЛрдЪ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рджрд░реНрджрд░рд╣рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЯреВрд▓ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ TaskFactory рдХрд╛ FromAsync рд╡рд┐рдзрд┐ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд╕реНрдХ рдореЗрдВ WebRequest рд╡рд░реНрдЧ рдХреЗ рдкреБрд░рд╛рдиреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реВрдВред

 object state = null; WebRequest wr = WebRequest.CreateHttp("http://github.com"); await Task.Factory.FromAsync( wr.BeginGetResponse, we.EndGetResponse ); 

рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рдЖрдк рдмрд┐рд▓реНрдЯ-рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдкреБрд░рд╛рдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╢реБрд░реБрдЖрддреА рддрд░реАрдХреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ рдЬреЛ IAsyncResult рдФрд░ EndDoSomething рддрд░реАрдХреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдЯрд╛рд╕реНрдХ рдХреЙрдордкреНрд▓реЗрдХреНрд╢рди рд╕реЛрд░реНрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд╕реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓реАрдЧреЗрд╕реА-рдПрдкреАрдЖрдИ рдХреЛ рдХрдиреНрд╡рд░реНрдЯ рдХрд░реЗрдВ


рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрдкрдХрд░рдг рдЯрд╛рд╕реНрдХ рдХреЙрдордкреНрд▓реЗрдХреНрд╢рди рд╕реЛрд░реНрд╕ рдХреНрд▓рд╛рд╕ рд╣реИред рдХрд╛рд░реНрдпреЛрдВ, рдЙрджреНрджреЗрд╢реНрдп рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдереНрд░реЗрдбрдкреВрд▓ рд╡рд░реНрдЧ рдХреЗ RegisterWaitForSingleObject рд╡рд┐рдзрд┐ рдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛ред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЯрд╛рд╕реНрдХ рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рдЯрд╛рд╕реНрдХрдлреИрдХреНрдЯрд░реА рд╡рд░реНрдЧ рдХреЗ FromAsync рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рдпрд╣рд╛рдВ рд╣рдореЗрдВ .net рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЙрдбрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдкреВрд░реЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ Microsoft рдкрд┐рдЫрд▓реЗ 15 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдкреЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ: рдЯрд╛рд╕реНрдХ-рдЖрдзрд╛рд░рд┐рдд рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреИрдЯрд░реНрди (TAP) рд╕реЗ рдкрд╣рд▓реЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреИрдЯрд░реНрди (рдПрдкреАрдкреА) рдерд╛, рдЬреЛ рд╢реБрд░реБрдЖрддреА DoSomething рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдерд╛ рдЬреЛ IAsyncResult рдФрд░ End DoSomething рддрд░реАрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ FromAsync рд╡рд┐рдзрд┐ рдЗрди рд╡рд░реНрд╖реЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдордп рдХреЗ рд╕рд╛рде, рдЗрд╕реЗ рдЗрд╡реЗрдВрдЯ рдЖрдзрд╛рд░рд┐рдд рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреИрдЯрд░реНрди ( EAP ) рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдиреЗ рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ рдПрдХ рдШрдЯрдирд╛ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЯрд╛рд╕реНрдХрдХрдореНрдкреНрд▓реАрд╢рди рд╕реНрд░реЛрдд рдИрд╡реЗрдВрдЯ рдореЙрдбрд▓ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд┐рд░реНрдорд┐рдд рдЯрд╛рд╕реНрдХ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд-рдПрдкреАрдЖрдИ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдЙрдирдХреЗ рдХрд╛рдо рдХрд╛ рд╕рд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдЗрд╕ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рдЯрд╛рд╕реНрдХ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд░рд╛рдЬреНрдп рдЯрд╛рд╕реНрдХ рдХреЙрдордкреНрд▓реЗрдХреНрд╢рди рд╕реЛрд░реНрд╕ рдХреЗ рд╕реЗрдЯрд╕реЗрдЯ, рд╕реЗрдЯ, рдЕрдкрд╡рд╛рдж рдЖрджрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рдЬрд╣рд╛рдВ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЗрд╕ рдЯрд╛рд╕реНрдХ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЯрд╛рд╕реНрдХ рдХреЙрдордкреНрд▓реЗрдХреНрд╢рди рд╕реНрд░реЛрдд рдкрд░ рд▓рд╛рдЧреВ рд╡рд┐рдзрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдпрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВ, рдЬрд╣рд╛рдВ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рдИрдПрдкреА рдЯрд╛рд╕реНрдХ рдЯрд╛рд╕реНрдХрдкреНрд▓реЗрдХреНрд╢рдирдГ рд╕реЛрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЯрд╛рд╕реНрдХ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реБрдП рд╣реИрдВ: рдЬрдм рдИрд╡реЗрдВрдЯ рдХреЛ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЯрд╛рд╕реНрдХ рдХреЛ рдкреВрд░реНрдг рд░рд╛рдЬреНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕ рдЯрд╛рд╕реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛рд░рдд рдСрдкрд░реЗрдЯрд░ рдиреЗ рдЯрд╛рд╕реНрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░рд┐рдгрд╛рдо рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред

 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 рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрднрд╛рд╡рдирд╛ рдЦреБрд▓рддреА рд╣реИ рдЬреЛ рдереНрд░реЗрдбреНрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдкреНрд░рд╡рд╛рд╣, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдорд╣рдВрдЧрд╛ рд╕рдВрд╕рд╛рдзрди рд╣реИ рдФрд░ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рд╣реИ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд░реИрдо рджреНрд╡рд╛рд░рд╛)ред рдпрд╣ рд╕реАрдорд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдХреЗ рд╣рд╛рд╕рд┐рд▓ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЛрдбреЗрдб рд╡реЗрдм-рдПрдкреНрд▓рд┐рдХреЗрд╢рдиред рдЙрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд▓рдВрдмреА-рдорддрджрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЪрд╛рд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЪрд╛рд▓ рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ: рдЖрдкрдХреЛ рдПрдкреАрдЖрдИ рд╕реЗ рдЙрд╕рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдПрдкреАрдЖрдИ рдШрдЯрдирд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг WebSocket рдХреЗ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ HTTP рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдирд┐рд░реНрдорд┐рдд рд╕рднреА API рдпрд╛ рдЬрдм рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ HTTP рд╕рд░реНрд╡рд░ рд╕реЗ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реИред рдПрдХ HTTP рд╕рд░реНрд╡рд░ рдЦреБрдж рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЛ рднрдбрд╝рдХрд╛рдиреЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдЯрд╛рдЗрдорд░ рджреНрд╡рд╛рд░рд╛ рд╕рд░реНрд╡рд░ рдХреЛ рдкреНрд░рджреВрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдФрд╕рдд рдЯрд┐рдорд░рдЗрдВрдЯрд░рд╡рд▓ / 2 рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд▓рдВрдм рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЙрдиреНрдЧ рдкреЛрд▓рд┐рдВрдЧ рдирд╛рдордХ рдПрдХ рдЯреНрд░рд┐рдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджреЗрд░реА рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдПрдХ рдШрдЯрдирд╛ рд╣реЛрдЧреАред рдпрджрд┐ рдХреЛрдИ рдШрдЯрдирд╛ рд╣реБрдИ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЕрдиреБрд░реЛрдз рдлрд┐рд░ рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

 while(!eventOccures && !timeoutExceeded) { CheckTimout(); CheckEvent(); Thread.Sleep(1); } 

рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рдШрдЯрдирд╛ рдХреЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╣реА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ, рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ, рдПрдХ рд╕рдВрдкреВрд░реНрдг рд╕реНрдЯреНрд░реАрдо рд▓реЗрддрд╛ рд╣реИред рд╣рд╛рдВ, рдФрд░ рд╣рдореЗрдВ рдШрдЯрдирд╛ рдХреЗ рдЯреНрд░рд┐рдЧрд░ рдкрд░ 1ms рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рджреЗрд░реА рдорд┐рд▓рддреА рд╣реИ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрджрд┐ рдЖрдк 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 рд╡рд┐рдзрд┐ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реНрдг рдЯрд╛рд╕реНрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк ValueTask рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рд╣рдо рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЯрд╛рд╕реНрдХ рдХреЙрдордкреНрд▓реЗрдХреНрд╢рди рд╕реНрд░реЛрдд рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╣рдо рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

ValueTask: рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ


Async / рдкреНрд░рддреАрдХреНрд╖рд╛рд░рдд рдСрдкрд░реЗрдЯрд░, рдпреАрд▓реНрдб рд░рд┐рдЯрд░реНрди рдСрдкрд░реЗрдЯрд░ рдХреА рддрд░рд╣, рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдорд╛рдорд▓рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдХреНрд╕рд░ рдХрд╣рд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рджрд╕рд┐рдпреЛрдВ рдФрд░ рд╕реИрдХрдбрд╝реЛрдВ рд╣рдЬрд╛рд░реЛрдВ рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдРрд╕реА рдХреЛрдИ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╕рднреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рдПрдХ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рддреЛ .NET рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - ValueTask рд╕рдВрд░рдЪрдирд╛ред рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдПрдХ рдХреИрд╢ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдмрд╣реБрдд рдмрд╛рд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдХреБрдЫ рдореВрд▓реНрдп рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдо рдЙрдирдХреЗ рдкреАрдЫреЗ рдХреБрдЫ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЖрдЗрдУ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдореИрдВ рдмрд╛рдж рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреВрд░реА рд╡рд┐рдзрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд┐рдзрд┐ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 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); } 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдо-рдкрде рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рдХреЗ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЬреАрд╕реА рдкрд░ рд▓реЛрдб рдХрд░рдирд╛, рдЬрдмрдХрд┐ рдЙрди рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рд╣рдореЗрдВ рдЕрднреА рднреА рдЖрдИрдУ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдкреНрд▓рд╕ рд░рд╣реЗрдЧрд╛ / рдорд╛рдЗрдирд╕ рдкреБрд░рд╛рдирд╛:

 public ValueTask<string> GetById(int id) { if (cache.TryGetValue(id, out string val)) return new ValueTask<string>(val); return new ValueTask<string>(RequestById(id)); } 

рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ: рдпрджрд┐ рдХреИрд╢ рдореЗрдВ рдХреЛрдИ рдореВрд▓реНрдп рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: C # рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ ValueTask рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдХреА рддрд░рд╣ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред

TaskSchedulers: рдХрд╛рд░реНрдп рд▓реЙрдиреНрдЪ рд░рдгрдиреАрддрд┐рдпрд╛рдБ


рдЕрдЧрд▓рд╛ рдПрдкреАрдЖрдИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╡рд╣ рд╣реИ рдЯрд╛рд╕реНрдХрд╕рд┐рдбреНрдпреВрд▓рд░ рдХреНрд▓рд╛рд╕ рдФрд░ рдЙрд╕рдХрд╛ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЯреАрдкреАрдПрд▓ рдореЗрдВ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдЯрд╛рд╕реНрдХрд╡ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдРрд╕реА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рдЯрд╛рд╕реНрдХрд╕реНрдХреНрд░рд╛рдЗрдбрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд░рдгрдиреАрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдХрд┐ ParallelExtensionsExtras рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдорд┐рд▓реЗрдЧреА , рдЬрд┐рд╕реЗ Microsoft рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди .NET рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ Nuget рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдЗрдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

  • CurrentThreadTaskScheduler - рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ
  • LimitedConcurrencyLevelTaskScheduler - рдПрди рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдПрдХ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • OrderedTaskScheduler тАФ LimitedConcurrencyLevelTaskScheduler(1), .
  • WorkStealingTaskScheduler тАФ work-stealing . ThreadPool. , .NET ThreadPool , , . . .. WorkStealingTaskScheduler' , ThreadPool .
  • QueuedTaskScheduler - рдЖрдк рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрддрд╛рд░ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
  • ThreadPerTaskScheduler - рдЙрд╕ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рддреЗ рд╣реИрдВред

Microsoft рдмреНрд▓реЙрдЧ рдкрд░ TaskSchedulers рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╕реНрддреГрдд рд▓реЗрдЦ рд╣реИ ред

рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЯрд╛рд╕реНрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣рд░ рдЪреАрдЬ рдХреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд╛рд╕реНрдХ рд╡рд┐рдВрдбреЛ рд╣реИред рдЗрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдЖрдк рдХрд╛рд░реНрдп рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдб рдХреА рдирд┐рд╖реНрдкрд╛рджрди рд░реЗрдЦрд╛ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред



PLinq рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд░реНрдЧ


рдЯрд╛рд╕реНрдХ рдФрд░ рд╕рдм рдХреБрдЫ рдХреЗ рд╕рд╛рде рдЬреЛ .NET рдореЗрдВ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рджреЛ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЙрдкрдХрд░рдг рд╣реИрдВ: PLinq (Linq2Parallel) рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд░реНрдЧред рдкрд╣рд▓реЗ рдХрдИ рдзрд╛рдЧреЗ рдкрд░ рд╕рднреА Linq рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ред рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ WithDegreeOfParallelism рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмрд╣реБрдзрд╛ PLinq рд░рди рдореЛрдб рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧрддрд┐ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рдЗрдирд╕рд╛рдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрдЧреА, рджреВрд╕рд░реА рддрд░рдл, рдкреНрд░рдпрд╛рд╕ рдХрд╛ рдореВрд▓реНрдп рдмрд╣реБрдд рдХрдо рд╣реИ: рдЖрдкрдХреЛ рдмрд╕ рд▓рд╛рдЗрдирдк рд╡рд┐рдзрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рдордиреЗ рдЕрд╕рдорд╛рди рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рднрд╛рдЬрди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ PLinq рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЖрдк рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ редред

рд╕реНрдЯреИрдЯрд┐рдХ рдкреИрд░реЗрд▓рд▓ рдХреНрд▓рд╛рд╕, рдлрд╝реЙрд░рдЪ рдореЗрдВ рдХрд▓реЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд░рдХреНрд╡реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝реЙрд░ рд▓реВрдк рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрдиреЛрд╡рд╛ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдИ рдбреЗрд▓рд┐рдЧреЗрдЯреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЧрдгрдирд╛ рдХреЗ рдЕрдВрдд рддрдХ рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ ParallelOptions рдкрд╛рд╕ рдХрд░рдХреЗ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЯрд╛рд╕реНрдХрд╕реНрдХреНрд░рд┐рдбреНрдпреВрд▓рд░ рдФрд░ рд░рджреНрджреАрдХрд░рдг рдХреЛ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдиреА рд░рд┐рдкреЛрд░реНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм, рдЬрдм рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЯрд╛рдЗрдк рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдлрдЯрдХрд╛рд░ рд▓рдЧрд╛рддрд╛ рд╣реИ рдХрд┐ 15 рд╡рд╛рдВ рдкрдиреНрдирд╛ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рджреВрдВрдЧрд╛ред рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓реЗрдЦ рдореЗрдВ рдЕрдиреНрдп рдЯреНрд░рд┐рдХреНрд╕, рдПрдкреАрдЖрдИ, рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЯреВрд▓ рдФрд░ рдХрдорд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдирд┐рд╖реНрдХрд░реНрд╖:

  • рдЖрдзреБрдирд┐рдХ рдкреАрд╕реА рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдереНрд░реЗрдбреНрд╕, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХрддрд╛ рдФрд░ рд╕рдорд╛рдирддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред
  • .NET рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдХрд░рдг рд╣реИрдВред
  • рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджрд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдЕрдХреНрд╕рд░ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд┐рдирд╛ рдкреБрд░рд╛рдиреЗ рдПрдкреАрдЖрдИ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред
  • .NET рдореЗрдВ рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдереНрд░реЗрдб рдФрд░ рдереНрд░реЗрдбрдкреВрд▓ рдХрдХреНрд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
  • Thread.Abort, Thread.Interrupt, Win32 API TerminateThread . CancellationToken'
  • тАФ , . , . TaskCompletionSource
  • .NET Task'.
  • c# async/await
  • Task' TaskScheduler'
  • ValueTask hot-paths memory-traffic
  • Tasks Threads Visual Studio
  • PLinq , , partitioning
  • ...

Source: https://habr.com/ru/post/hi452094/


All Articles