.NET: рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдиреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгред рднрд╛рдЧ ---- рдкрд╣рд▓рд╛

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

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

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

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

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

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

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

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

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

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

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

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

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

рдПрдХ рдзрд╛рдЧрд╛ рд╢реБрд░реВ рдХрд░рдирд╛

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

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

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

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

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

рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд:

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

рдкреВрд▓ рд╕реЗ рдереНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ QueueUserWorkItem рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд╡реЗрдЯрдХреЙрд▓рдмреИрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреИрд░рд╛рдореЗрдЯреНрд░рд┐рдЬреНрдбрдереНрд░реЗрдбрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗ рд╕рдорд╛рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

ThreadPool.QueueUserWorkItem(...);

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

ThreadPool.RegisterWaitForSingleObject(...)

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

System.Threading.Timer

рдкреВрд▓ рд╕реЗ рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рднреЗрдЬрдиреЗ рдХрд╛ рдПрдХ рдЕрдиреЛрдЦрд╛ рддрд░реАрдХрд╛ рднреА рд╣реИ - рдмреЗрдЧрд┐рдирдЗрдирд╡реЛрдХ рд╡рд┐рдзрд┐ред

DelegateInstance.BeginInvoke

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

Kernel32.dll CreateThread

рдереНрд░реЗрдбреНрд╕ рджреЗрдЦрдирд╛ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рдирд╛

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

.NET: рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдиреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгред рднрд╛рдЧ ---- рдкрд╣рд▓рд╛

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

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

  • async рдЯрд╛рд╕реНрдХ рдпрд╛ рд╢реВрдиреНрдп рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕рдВрд╢реЛрдзрдХ рд╣реИ
  • рдФрд░ wait рдПрдХ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рдХрд╛рд░реНрдп рдкреНрд░рддреАрдХреНрд╖рд╛ рдСрдкрд░реЗрдЯрд░ рд╣реИред

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

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

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

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

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

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

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

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

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

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

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
}

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

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

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

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

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

рдзрд╛рдЧреЛрдВ рдХреЛ рд░реЛрдХрдирд╛

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

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

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

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

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

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

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

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

TaskCompletionSource рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реАрдЧреЗрд╕реА API рдХреЛ рдХрд╛рд░реНрдп рдЖрдзрд╛рд░рд┐рдд рдореЗрдВ рдмрджрд▓реЗрдВ

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

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

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

public static Task<Result> DoAsync(this SomeApiInstance someApiObj) {

    var completionSource = new TaskCompletionSource<Result>();
    someApiObj.Done += 
        result => completionSource.SetResult(result);
    someApiObj.Do();

    result completionSource.Task;
}

рдХрд╛рд░реНрдпрдкреВрд░реНрддрд┐рд╕реНрд░реЛрдд рдпреБрдХреНрддрд┐рдпрд╛рдБ рдПрд╡рдВ рдпреБрдХреНрддрд┐рдпрд╛рдБ

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

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

while(!eventOccures && !timeoutExceeded)  {

  CheckTimout();
  CheckEvent();
  Thread.Sleep(1);
}

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

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

рд╡реИрд▓реНрдпреВрдЯрд╛рд╕реНрдХ: рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ

рдПрд╕рд┐рдВрдХ/рд╡реЗрдЯ рдСрдкрд░реЗрдЯрд░, рдпреАрд▓реНрдб рд░рд┐рдЯрд░реНрди рдСрдкрд░реЗрдЯрд░ рдХреА рддрд░рд╣, рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдорд╛рдорд▓рд╛ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдХреНрд╕рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рджрд╕рд┐рдпреЛрдВ рдФрд░ рд╕реИрдХрдбрд╝реЛрдВ рд╣рдЬрд╛рд░реЛрдВ рдХреЙрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдРрд╕реА рдХреЛрдИ рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╕рднреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рддреЛ .NET рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреВрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рд╡реИрд▓реНрдпреВрдЯрд╛рд╕реНрдХ рд╕рдВрд░рдЪрдирд╛ред рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ: рдПрдХ рдХреИрд╢ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЕрдХреНрд╕рд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдХреБрдЫ рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмрд╕ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВ; рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдзреАрдореЗ 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);
}

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

public ValueTask<string> GetById(int id) {

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

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

рдХрд╛рд░реНрдп рдЕрдиреБрд╕реВрдЪрдХ: рдХрд╛рд░реНрдп рд▓реЙрдиреНрдЪ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди

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

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

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

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

.NET: рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдиреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгред рднрд╛рдЧ ---- рдкрд╣рд▓рд╛

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

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

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

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

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

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

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

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ