рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдХреЛрдбрд┐рдВрдЧрд╕рд╛рдЗрдЯ рдмреНрд▓реЙрдЧ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИрд▓реЗрдЦ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИрдЪреАрдЬреЛрдВ рдХреЛ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ - рдЕрд░реНрдерд╛рдд, рдХрдИ рдХрд╛рд░реНрдп рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рдмреАрдЪ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ - рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдореМрдЬреВрдж рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рд╡реЗ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рддреЛ рдпрд╣ рдЬрд░реВрд░рдд рдФрд░ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдИред рдпрд╣ рдЕрдм 2019 рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЛ 8-рдХреЛрд░ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ рд╕реАрдкреАрдпреВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд▓реИрдкрдЯреЙрдк рдкрд░ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реИрдХрдбрд╝реЛрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдмрдбрд╝реА рд╣реИред рдореЗрд░реЗ рдмрдЧрд▓ рдореЗрдВ, рдереЛрдбрд╝рд╛ рдкреБрд░рд╛рдирд╛ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЦрд░реАрджрд╛ рдерд╛ - рдФрд░ рдЗрд╕рдореЗрдВ 8-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рднреА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд╡реЗрдм рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ 16-рдХреЛрд░ рд╕реАрдкреАрдпреВ рд╕реЗ рд▓реИрд╕ рдЗрд╕ рд╕рд╛рд▓ рдХреЗ рдкреНрд░рдореБрдЦ рд╕реНрдорд╛рд░реНрдЯрдлреЛрдиреЛрдВ рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП рдХрдИ рддрд░рд╣ рдХреЗ рд▓реЗрдЦ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо $ 20 рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП, MS Azure рдЖрдкрдХреЛ 2-рдЯреАрдмреА рд░реИрдо рдХреЗ рд╕рд╛рде 128-рдХреЛрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рдЗрд╕ рд╢рдХреНрддрд┐ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдн рдирд╣реАрдВ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЛ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЕрдВрддрд░реНрд╡рд╕реНрддреБ
рд╢рдмреНрджрд╛рд╡рд▓реА
рдкреНрд░рдХреНрд░рд┐рдпрд╛ - рдПрдХ рдУрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдереНрд░реЗрдбреНрд╕ рд╡рд╛рд▓реЗ рдПрдХ рдЕрд▓рдЧ рдкрддреЗ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
рдереНрд░реЗрдб - рдПрдХ рдУрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдирд┐рд╖реНрдкрд╛рджрди рдЗрдХрд╛рдИ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдереНрд░реЗрдбреНрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдШрдЯрдХ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рд╕реНрдореГрддрд┐ рдФрд░ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ - рдПрдХ рдУрдПрд╕ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛ рдПрдХ рд╕рд╛рде рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИред
рдорд▓реНрдЯреА-рдХреЛрд░ - рдПрдХ рд╕реАрдкреАрдпреВ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдИ рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ
рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ - рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛ рдХрдИ рд╕реАрдкреАрдпреВ рдХреЗ рд╕рд╛рде рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИред
рдорд▓реНрдЯреА-рдереНрд░реЗрдбрд┐рдВрдЧ - рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдлреИрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИред
рд╕рдорд╛рдирддрд╛ - рд╕рдордп рдХреА рдПрдХ рдЗрдХрд╛рдИ рдореЗрдВ рдХрдИ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд╛рде рднреМрддрд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ - рдмрд╛рдж рдореЗрдВ рд╕рдордп рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдЫреЛрдбрд╝рдХрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ред
рдПрдХ рд░реВрдкрдХ
рд╕рднреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрднреА-рдЕрднреА рд╢реБрд░реВ рдХреА рдЧрдИ рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рд▓рд┐рдП рдЦрд╛рдирд╛ рдкрдХрд╛рдиреЗ рдХрд╛ рд░реВрдкрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд╛рд╢реНрддрд╛ рдмрдирд╛рдирд╛ рдЗрд╕ рд░реВрдкрдХ рдореЗрдВ рдПрдХ
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
рд╕реБрдмрд╣ рдХрд╛ рдирд╛рд╢реНрддрд╛ рдмрдирд╛рддреЗ рд╕рдордп, рдореИрдВ (
рд╕реАрдкреАрдпреВ ) рд░рд╕реЛрдИ (
рдХрдВрдкреНрдпреВрдЯрд░ ) рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рджреЛ рд╣рд╛рде (
рдХреЛрд░реЗ ) рд╣реИрдВред рд░рд╕реЛрдИ рдореЗрдВ, рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╡рд░реНрдЧреАрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ (
IO ): рд╕реНрдЯреЛрд╡, рдХреЗрддрд▓реА, рдЯреЛрд╕реНрдЯрд░, рдлреНрд░рд┐рдЬред рдореИрдВ рд╕реНрдЯреЛрд╡ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реВрдВ, рдЙрд╕ рдкрд░ рдПрдХ рдлреНрд░рд╛рдЗрдВрдЧ рдкреИрди рдбрд╛рд▓реЗрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдХреБрдЫ рд╡рдирд╕реНрдкрддрд┐ рддреЗрд▓ рдбрд╛рд▓реЗрдВред рддреЗрд▓ рдХреЛ рдЧрд░реНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ (
рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ, рдЧреИрд░-рдмреНрд▓реЙрдХрд┐рдВрдЧ-рдЖрдИрдУ-рд░реБрдХреЛ ), рдореБрдЭреЗ рдлреНрд░рд┐рдЬ рд╕реЗ рдХреБрдЫ рдЕрдВрдбреЗ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХрдЯреЛрд░реЗ рдореЗрдВ рдлреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣рд╛рде рд╕реЗ
рдереНрд░реЗрдб рдХрд░рддреЗ рд╣реИрдВ (
рдереНрд░реЗрдб # 1 )ред рдЗрд╕ рдмреАрдЪ, рджреВрд╕рд░рд╛ рд╣рд╛рде (рдереНрд░реЗрдб # 2) рдХрдЯреЛрд░реЗ рдХреЛ рдЬрдЧрд╣ (
рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди ) рдореЗрдВ рдкрдХрдбрд╝ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдХреЗрддрд▓реА рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдордп рдкрд░реНрдпрд╛рдкреНрдд
рдереНрд░реЗрдб рдирд╣реАрдВ рд╣реИрдВ (
рдереНрд░реЗрдб рднреБрдЦрдорд░реА )ред рдЬрдм рдореИрдВ рдЕрдВрдбреЗ рдорд╛рд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдлреНрд░рд╛рдЗрдВрдЧ рдкреИрди рдкрд░реНрдпрд╛рдкреНрдд рдЧрд░реНрдо рд╣реЛ рдЧрдпрд╛ (рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг), рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рд╡реНрд╣реАрдкреНрдб рдЕрдВрдбреЗ рдбрд╛рд▓реЗред рдореИрдВ рдХреЗрддрд▓реА рдкрд░ рдкрд╣реБрдВрдЪрддрд╛ рд╣реВрдВ, рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдмрд▓реЗ рд╣реБрдП рдкрд╛рдиреА рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ (
рдЕрд╡рд░реБрджреНрдз-рдЖрдИрдУ-рд░реБрдХреЛ ) - рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдЯреЛрд░реЗ рдХреЛ рдзреЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рдерд╛ред
рдореИрдВрдиреЗ рдЖрдорд▓реЗрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдХреЗрд╡рд▓ 2 рд╣рд╛рдереЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ), рд▓реЗрдХрд┐рди 3 рдПрдХ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдереЗ: рдЕрдВрдбреЗ рдХреЛ рдорд╛рд░рдирд╛, рдХрдЯреЛрд░реЗ рдХреЛ рдкрдХрдбрд╝рдирд╛, рдлреНрд░рд╛рдЗрдВрдЧ рдкреИрди рдХреЛ рдЧрд░реНрдо рдХрд░рдирд╛ред CPU рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рднрд╛рдЧ рд╣реИ рдФрд░ IO рд╡рд╣ рднрд╛рдЧ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП CPU рдХреЛ рдХреБрдЫ рдХрд╛рдо рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рдирд╛ рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡реА рд╣реЛрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдпрд╣ IO рдХреЗ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИред
рд░реВрдкрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
- рдЕрдЧрд░ рдореИрдВ рдирд╛рд╢реНрддрд╛ рдХрд░рддреЗ рд╕рдордп рдЕрдкрдиреЗ рдХрдкрдбрд╝реЗ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реЛрддрд╛, рддреЛ рдореИрдВ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реЛрддрд╛ред рдордиреБрд╖реНрдп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВред
- рдХрдИ рд░рд╕реЛрдЗрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд╕реЛрдИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд░реЗрд╕реНрддрд░рд╛рдВ рдореЗрдВ - рдПрдХ рдорд▓реНрдЯреА-рдХреЛрд░ рдХрдВрдкреНрдпреВрдЯрд░ рд╣реИред
- рдХрдИ рд░реЗрд╕реНрддрд░рд╛рдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрд▓ рдлреВрдб рдХреЛрд░реНрдЯ рдПрдХ рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛ред
.NET рдЙрдкрдХрд░рдг
.NET рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм рдпрд╣ рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ - рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрдИ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдкрд░ рднреАред рдкреНрд░рддреНрдпреЗрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде, рдпрд╣ рдереНрд░реЗрдбреНрд╕ рдФрд░ рдирдП OS рдереНрд░реЗрдб рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рдкрд░рддреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдореВрд░реНрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрдореВрд░реНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рддреЛрдВ рдХреЛ рдиреАрдЪреЗ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдкреИрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рдЧреЛрд▓реА рдорд╛рд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ), рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд░реНрддрдорд╛рди рдЕрдореВрд░реНрдд рд╕реНрддрд░ рдкрд░ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрдкрдХрд░рдг рдХрд╣рд╛ рдерд╛, рддреЛ рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдпрд╛ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдкреИрдХреЗрдЬ рдФрд░ рдкреВрд░реНрдг рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рджреЛрдиреЛрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрдВрдЯрд░рдлреЗрд╕ (рдПрдкреАрдЖрдИ) рдЬреЛ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред
рдПрдХ рдзрд╛рдЧрд╛ рд╢реБрд░реВ рдХрд░рдирд╛
рдереНрд░реЗрдб рдХреНрд▓рд╛рд╕ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА .NET рдХреНрд▓рд╛рд╕ рд╣реИред рдЗрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдЗрди рджреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
- рдереНрд░реЗрдбрд╕реНрдЯрд╛рд░реНрдЯ - рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ
- ParametrizedThreadStart - рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ-рдЯрд╛рдЗрдк рдкреИрд░рд╛рдореАрдЯрд░ред
рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдирд╡-рдирд┐рд░реНрдорд┐рдд рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ ParametrizedThreadStart рдбреЗрд▓рд┐рдЧреЗрдЯ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдереНрд░реЗрдб рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдХ рдзрд╛рдЧрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрд╕рд╛рдзрди рд▓рдЧрддреЗ рд╣реИрдВ рдФрд░ рдзрд╛рдЧрд╛ рд╕реНрд╡рдпрдВ рдПрдХ рднрд╛рд░реА рд╡рд╕реНрддреБ рд╣реИ - рдХрдо рд╕реЗ рдХрдо рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдУрдПрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдХреЛ 1MB рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
new Thread(...).Start(...);
рдереНрд░реЗрдбрдкреВрд▓ рд╡рд░реНрдЧ рдПрдХ рдкреВрд▓ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред .NET рдореЗрдВ, рдереНрд░реЗрдб рдкреВрд▓ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХрд▓рд╛ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдФрд░ Microsoft рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛:рдЬрдм рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрдк рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХреБрдЫ рдзрд╛рдЧреЗ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрдм рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдпрджрд┐ рдереНрд░реЗрдбреНрд╕ рдЕрдХреНрд╕рд░ рдФрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд▓ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдкреВрд▓ рдореЗрдВ рд╕рд╣реА рд╕рдордп рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдереНрд░реЗрдб рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдпрд╣ рдпрд╛ рддреЛ рд╕рдХреНрд░рд┐рдп рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реЛрдиреЗ рдпрд╛ рдПрдХ рдирдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рдереНрд░реЗрдб рдкреВрд▓ рдЫреЛрдЯреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИ рдФрд░ рдпрд╣ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдкреВрд░реА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИредQueueUserWorkItem рд╡рд┐рдзрд┐ рдкреВрд▓ рд╕реЗ рдереНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐
WaitCallback -type рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд▓реЗрддреА рд╣реИред рдЗрд╕рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ ParametrizedThreadStart рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣реА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред
ThreadPool.QueueUserWorkItem(...);
рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ IO рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЬреНрдЮрд╛рдд RegisterWaitForSingleObject рдереНрд░реЗрдб рдкреВрд▓ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╡рд┐рдзрд┐ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж WaitHandle рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
ThreadPool.RegisterWaitForSingleObject(...)
.NET рдореЗрдВ рдПрдХ рдереНрд░реЗрдб рдЯрд╛рдЗрдорд░ рд╣реИ, рдФрд░ рдпрд╣ WinForms / WPF рдЯрд╛рдЗрдорд░ рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкреВрд▓ рд╕реЗ рд▓рд┐рдП рдЧрдП рдереНрд░реЗрдб рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
System.Threading.Timer
рдкреВрд▓ рд╕реЗ рдПрдХ рдереНрд░реЗрдб рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рднреЗрдЬрдиреЗ рдХрд╛ рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рднреА рд╣реИ - BeginInvoke рд╡рд┐рдзрд┐ред
DelegateInstance.BeginInvoke
рдореИрдВ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХрдИ рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВ - рдХрд░реНрдиреЗрд▓ 32.dll Win32 API рд╕реЗ CreateThreadред рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд╣рд░реА рддрдВрддреНрд░ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ - рдФрд░ рдореИрдВрдиреЗ рдЕрднреА рднреА рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рдХрд╛рд░рдг рдХреНрдпрд╛ рдереЗред
Kernel32.dll CreateThread
рдереНрд░реЗрдбрд┐рдВрдЧ рджреЗрдЦрдирд╛ рдФрд░ рдбрд┐рдмрдЧ рдХрд░рдирд╛
рд╕рднреА рдереНрд░реЗрдбреНрд╕ - рдЪрд╛рд╣реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП, рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдШрдЯрдХ рдпрд╛ .NET рдкреВрд▓ - рдХреЛ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА
рдереНрд░реЗрдбреНрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдВрдбреЛ рдХреЗрд╡рд▓ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреА рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдореЛрдб рдореЗрдВ рдбреАрдмрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣рд╛рдВ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рдирд╛рдо рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдереНрд░реЗрдбреНрд╕ рдкрд░ рдбрд┐рдмрдЧ рдореЛрдб рдХреЛ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдереНрд░реЗрдб рд╡рд░реНрдЧ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЧреБрдг рдЖрдкрдХреЛ рдереНрд░реЗрдб рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рддрдм рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреА рдЬрд╛рдПрдЧреА рдЬрдм рдУрдПрд╕ рдФрд░ рд╕реАрдПрд▓рдЖрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреЛ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЯрд╛рд╕реНрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп
рдЯрд╛рд╕реНрдХ рдкреИрд░реЗрд▓рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (TPL) рдкрд╣рд▓реА рдмрд╛рд░ .NET 4.0 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рд╣реИред рдкреБрд░рд╛рдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред TPL рдХреА рдореБрдЦреНрдп рдЗрдХрд╛рдИ System.Threading.Tasks рдирд╛рдо рд╕реНрдерд╛рди рд╕реЗ
рдХрд╛рд░реНрдп рд╡рд░реНрдЧ рд╣реИред рдХрд╛рд░реНрдп рдзрд╛рдЧрд╛ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рд╕реА # рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдЯрд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕реБрдВрджрд░ рддрд░реАрдХрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ - рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рдСрдкрд░реЗрдЯрд░реЛрдВред рдпреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╕рд░рд▓ рдФрд░ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЬреЛ рд▓реЛрдЧ рдереНрд░реЗрдб рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд╛рдХрд┐рдл рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ рдЕрдм рдРрд╕реЗ рдРрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд▓рдВрдмреЗ рдСрдкрд░реЗрд╢рди рд╕реЗ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдЫ рд▓реЗрдЦреЛрдВ) рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреБрдЫ рд╡рд╛рдХреНрдпреЛрдВ рдореЗрдВ рдореВрд▓ рдмрд╛рддреЗрдВ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛:
- async рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдорд╛рдкрдХ рд╣реИ рдЬреЛ рдЯрд╛рд╕реНрдХ рдпрд╛ рд╢реВрдиреНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИ
- рдкреНрд░рддреАрдХреНрд╖рд╛ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░: рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдСрдкрд░реЗрдЯрд░ рдЖрдорддреМрд░ рдкрд░ (рдЕрдкрд╡рд╛рдж рд╣реИрдВ) рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдХреЛ рдЬрд╛рдиреЗ рджреЗрдВ рдФрд░, рдЬрдм рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдереНрд░реЗрдб (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрджрд░реНрдн, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ) рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдХреНрдд рд╣реЛрдЧрд╛ рдкрд░рд┐рдгрд╛рдо, рдпрд╣ рд╡рд┐рдзрд┐ рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд░рд╣реЗрдЧрд╛ред .NET рдореЗрдВ, рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рдпреАрд▓реНрдб рд░рд┐рдЯрд░реНрди рдХреЗ рд╕рдорд╛рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рд╡рд┐рдзрд┐ рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рд╡рд░реНрдЧ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдореИрдВ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдб рдХреЗ рдХрд┐рд╕реА рднреА рд╕рд╛рдзрд╛рд░рдг рдЯреБрдХрдбрд╝реЗ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛, рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЗ рд╕рд╛рде JetBrains рдбреЙрдЯрдкреЗрдХ рдХреА рдорджрдж рд╕реЗ рдЗрд╕рдХреЗ рд╕рдВрдХрд▓рди рдХреЛ рджреЗрдЦреВрдВрдЧрд╛ред
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдЬрдм рдпрд╣ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдЙрддреНрдкрд╛рджрдХ (рдереНрд░реЗрдб рд╕реНрд▓реАрдк) (10000) рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕реЗ рдХреБрдЫ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕реАрдкреАрдпреВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
using TCO = System.Threading.Tasks.TaskCreationOptions; public static async void VoidAsyncMethod() { var cancellationSource = new CancellationTokenSource(); await Task.Factory.StartNew(
рдирд┐рдореНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- LongRunning - рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЗрд╕ рддрдереНрдп рдкрд░ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдЬрд▓реНрджреА рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдиреБрдХрд╕рд╛рди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд▓ рд╕реЗ рдореМрдЬреВрджрд╛ рдПрдХ рд▓реЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧрд╛ рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
- рдЕрдЯреИрдЪреНрдбрдкреЛрдЯрд░реЗрдВрдЯ - рдХрд╛рд░реНрдп рдХреЛ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрдп рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред
- рдЕрдзрд┐рдорд╛рдиреНрдпрддрд╛ - рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХреЛ рдмрд╛рдж рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдзрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд░рджреНрдж рдХрд░рдирд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдСрдкрд░реЗрд╢рди рдХреЛ рдареАрдХ рд╕реЗ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдореЗрдВ рдХреИрдВрд╕рд┐рд▓реЗрд╢рдирдЯреЛрдХрди рд╕реНрдЯреЗрдЯ рдЪреЗрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдРрд╕реА рдХреЛрдИ рдЬрд╛рдБрдЪ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рд░рджреНрджреАрдХрд░рдг рд╡рд┐рдзрд┐ рдХреЛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЯрд╛рд╕реНрдХ рдПрдХреНрдЬреАрдХреНрдпреВрдЯрд┐рд╡ рдХреЛ рдЯрд╛рд╕реНрдХ рдПрдХреНрдЬреАрдХреНрдпреВрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЯрд╛рд╕реНрдХ рдПрдХреНрдЬреАрдХреНрдпреВрд╢рди рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдХрд╛рд░реНрдп-рдкреНрд░рдХрд╛рд░-рдкреНрд░рдХрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рднреЗрдЬрд╛, рдЬрд┐рд╕реЗ рд╢реЗрдбреНрдпреВрд▓рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ, рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛рд░реНрдп рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкреВрд▓ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪрдпрдирд┐рдд рдереНрд░реЗрдб рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмрдирд╛рдП рдЧрдП рдХрд╛рд░реНрдп рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб (рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдб рд╣реИ) рдХреЛ рдЙрд╕реА рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЕрдХреНрд╕рд░, рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ 'рд╕рдорд╛рди рдзрд╛рдЧреЗ рдкрд░') рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдб рд╣реИред
рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ async рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ред рдпрджрд┐ рдРрд╕реА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдХрд╛рд░реНрдп рд▓реМрдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред Async рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХреЛ рдЕрдХреНрд╕рд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдШрдЯрдирд╛ рд╣реИрдВрдбрд▓рд░ рдпрд╛ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдЖрдЧ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЯрд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
StartNew рдкрджреНрдзрддрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо ConfigureAwait рдХреЛ рдЭреВрдареЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдлрд┐рд░, рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдХреЗ рдмрдЬрд╛рдп рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рднреА рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ рдЬрдм рдПрдордПрд╕ рд╕реЗ рдПрдХ рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ, рдЖрдк рдЙрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрдЪреНрдЫреЗ рдпрд╛ рдмреБрд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред
public static async void AnotherMethod() { int result = await AsyncMethod();
рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдП рдмрд┐рдирд╛ рдЯрд╛рд╕реНрдХ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдпрд╣ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рддреЛ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдкрд░ рд╡рд╛рдкрд╕ рдЖрдПрдВрдЧреЗред рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдХреЛ рдЕрдкрдиреЗ рдЖрдк рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рджреВрд╕рд░реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ, рд╣рдо рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдХреЛ рд░реЛрдХ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЦрд░рд╛рдм рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдзрд╛рдЧрд╛ рдмрд░реНрдмрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдПрдХ рдмрд╣реБрдд рд╣реА рдореВрд▓реНрдпрд╡рд╛рди рд╕рдВрд╕рд╛рдзрди - рд╕рд░рд▓ рдкреНрд░рддреАрдХреНрд╖рд╛ рдкрд░ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрджрд┐ рд╣рдо рдЬрд┐рд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдПрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдореЗрдВ рд╡рд╛рдкрд╕реА рдХрд╛ рдЕрд░реНрде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдВрджрд░реНрдн рд╕реЗ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЧрддрд┐рд░реЛрдз рдорд┐рд▓реЗрдЧрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛, рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдзрд┐ рд╕реНрд╡рдпрдВ рдХреЛ рдХреЙрд▓ рдереНрд░реЗрдб рдореЗрдВ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рдФрд░ рдиреБрдХрд╕рд╛рди рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреА рдмрдврд╝реА рд╣реБрдИ рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдореЗрдВ рд╕рдорд╛рди рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдкрд╡рд╛рдж рдПрдЧреНрд░реАрдЧреЗрдЯрдПрдХреНрд╕ рдЕрдкрд╡рд╛рдж рдореЗрдВ рд▓рд┐рдкрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрдирд░ рдПрдХреНрд╕реЗрдкреНрд╢рди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рдЪреЗрди рд▓рд┐рдЦрдиреЗ рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдЪреЗрди рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рджреЛ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рдорд╛рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЦрд░рд╛рдм рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдореБрджреНрджреЗ рд╣реЛрддреЗ рд╣реИрдВред
рдЬрдм рдХрд╛рд░реНрдп рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рд╡реНрд╣реЗрдирдПрдиреА рдФрд░ рд╡реНрд╣реЗрд▓ рд╡рд┐рдзрд┐рдпрд╛рдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддреА рд╣реИрдВ - рд╡реЗ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╕рдореВрд╣ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рд╛рд░рдВрдн рд╣реЛ рдпрд╛ рдЬрдм рдЗрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдереНрд░реЗрдбрд┐рдВрдЧ рд░реЛрдХрдирд╛
рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдзрд╛рдЧрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВред рдереНрд░реЗрдб рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдирд╛рдо рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ -
рдПрдмреЙрд░реНрдЯ рдФрд░
рдЗрдВрдЯрд░рдкреНрдЯ ред рдореИрдВ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрдврд╝рддрд╛ рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реВрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд╖рдг рдореЗрдВ
рдереНрд░реЗрдбрдЕрдмреНрд░реЗрдбреЗрдб рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдмрдХрд┐ рдХрд┐рд╕реА рднреА рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЪреБрдиреЗ рдЧрдП рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ред рдЬрдм рдкреВрд░реНрдгрд╛рдВрдХ рдЪрд░ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдкрд╡рд╛рдж рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдЦреИрд░, рдПрдмреЙрд░реНрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдмрди рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдб рдХреЗ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рдЧ рдореЗрдВ рдРрд╕реЗ рдЕрдкрд╡рд╛рдж рдмрдирд╛рдиреЗ рдХреА CLR рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк
рдереНрд░реЗрдб рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ
ред BeginCriticalRegion рдФрд░
Thread.EndCriticalRegion рдХреЙрд▓реНрд╕ред рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рдХреЛрдб рдЗрди рдХреЙрд▓реНрд╕ рдореЗрдВ рд▓рд┐рдкрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдЦрд╛рд▓реА рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрддрддрдГ рдлреНрд░реЗрдо рдХреЛрдб рдХреА рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдПрдХ рдЧреИрд░-рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред Microsoft рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ .NET рдХреЛрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рди рдХрд░рдиреЗ рдХреА рд╕реАрдорд╛ рддрдХ рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИред
рдЗрдВрдЯрд░рд░рдкреНрдЯ рд╡рд┐рдзрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдиреБрдорд╛рдирд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдпрд╣
рдереНрд░реЗрдбрдЗрдВрдЯрд░рдиреЗрдЯреЗрдб рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдереНрд░реЗрдб рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдереНрд░реЗрдб рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЛрдб рдореЗрдВ рд╣реЛред рдпрд╣ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдкреНрд░рддреАрдХреНрд╖рд╛рд╣реИрдВрдбрд▓ рдХреЗ рдЗрдВрддрдЬрд╛рд░ рдХреЗ рджреМрд░рд╛рди рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдереНрд░реЗрдб рдпрд╛ рдереНрд░реЗрдб рдХреЗ рдмрд╛рджред рд╕реЛ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрди рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рддрддрд╛ рдХрд╛ рдиреБрдХрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
рд░рджреНрджреАрдХрд░рдг рд╕рдВрд░рдЪрдирд╛ рдФрд░
рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХреЗрдирд╕реЛрд░реНрд╕ рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ: рдХреИрдВрд╕реЗрд▓реЗрд╢рдирдЯреЙрдХреЗрдирд╕реЙрд░реНрдлрд╝ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рд╡реЗ рд╣реА рдЬреЛ рдЗрд╕реЗ
рд░рджреНрдж рдХрд░рддреЗ рд╣реИрдВ, рдХреЙрд▓ рдХреЛ
рд░рджреНрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдХреИрдВрд╕рд┐рд▓реЗрд╢рдирдЯреЛрдХрди рдХреЛ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХреЗрди рдХреЗ рдорд╛рд▓рд┐рдХ рд╕реНрд╡рдпрдВ рдСрдкрд░реЗрд╢рди рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╡реЗ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдСрдкрд░реЗрд╢рди рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдПрдХ рдмреВрд▓рд┐рдпрди рд╕рдВрдкрддреНрддрд┐
IsCancellationRequested рдФрд░
ThrowIfCancelRequested рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд░рджреНрдж рд╡рд┐рдзрд┐ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкрд┐рдЫрд▓реЗ рдПрдХ
TaskCancelledException рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛,
рдЬрд┐рд╕рдиреЗ рдХреИрдВрд╕реЗрд▓реЗрд╢рдирдЯреЛрдХрди рдмрдирд╛рдпрд╛ред рдпрд╣ рд╡рд╣ рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдкрд╣рд▓реЗ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдпрд╣ рд▓рд╛рдн рд╣реИ рдХрд┐ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдпрд╣ рд╕рдЯреАрдХ рдЕрдкрд╡рд╛рдж рдорд╛рдорд▓реЛрдВ рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЛ рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдереНрд░реЗрдб рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдХреНрд░реВрд░ рддрд░реАрдХрд╛ рдПрдХ Win32 рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдЯрд░реНрдорд┐рдиреЗрдЯрд╣реНрд░реЗрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реАрдПрд▓рдЖрд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛рдлреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
MSDN рдореЗрдВ , рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:
"рдЯрд░реНрдорд┐рдиреЗрдЯрд╣реНрд░реЗрдб рдПрдХ рдЦрддрд░рдирд╛рдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред "FromAsync рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд╕реНрдХ-рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдореЗрдВ рдПрдХ рд▓рд┐рдЧреЗрд╕реА рдПрдкреАрдЖрдИ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛
рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдереЗ рдЬреЛ рдЯрд╛рд╕реНрдХ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдФрд░ рдЬрдм рд╡реЗ рдЕрдм рдЬреНрдпрд╛рджрд╛рддрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдЖрддрдВрдХ рдХреЛ рдЙрдХрд╕рд╛рддреЗ рдирд╣реАрдВ рд╣реИрдВ), рддреЛ рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреЗ рдПрдкреАрдЖрдИ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрдЧреА - рджреЛрдиреЛрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╡реЗ рдФрд░ рдЖрдкрдХреА рдЯреАрдо рдЕрддреАрдд рдореЗрдВ рд╢реАрд░реНрд╖ рдкрд░ рдереЗред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреАрдо рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ - рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрд╡рдпрдВ рдХреА рджреЗрдЦрднрд╛рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, .NET рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЙрдкрдХрд░рдг рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдкреБрд░рд╛рдиреЗ aprroaches рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдлреЙрд░реНрдо рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЗрдВ рд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдЗрдиреНрд╣реАрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЯрд╛рд╕реНрдХрдлреИрдХреНрдЯреНрд░реА рд╡рд┐рдзрд┐ рдЬрд┐рд╕реЗ FromAsync рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ WebRequest рд╡рд░реНрдЧ рдХреЗ рдкреБрд░рд╛рдиреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ FromAsync рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд╕реНрдХ рдореЗрдВ рд▓рдкреЗрдЯ рд░рд╣рд╛ рд╣реВрдВред
object state = null; WebRequest wr = WebRequest.CreateHttp("http://github.com"); await Task.Factory.FromAsync( wr.BeginGetResponse, we.EndGetResponse );
рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рдЖрдк рд╢рд╛рдпрдж рдмрд┐рд▓реНрдЯ-рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреБрд░рд╛рдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ BeginDoSomething рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИрдВ рдЬреЛ IAsyncResult рдФрд░ EndDoSomething рддрд░реАрдХреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВредTaskCompletionSource рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд╕реНрдХ-рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдореЗрдВ рдПрдХ рд▓рд┐рдЧреЗрд╕реА рдПрдкреАрдЖрдИ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛
рдЦреЛрдЬ рдХреЗ рд▓рд╛рдпрдХ рдПрдХ рдФрд░ рдЙрдкрдХрд░рдг
рдЯрд╛рд╕реНрдХрдкреНрд▓рд┐рдореЗрдВрдЯреЗрд╢рди рд╕реЛрд░реНрд╕ рдХреНрд▓рд╛рд╕ рд╣реИред рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдЙрджреНрджреЗрд╢реНрдп рдФрд░ рд╕рдВрдЪрд╛рд▓рди рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ, рдпрд╣ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рдереНрд░реЗрдбрдкреВрд▓ рд╡рд░реНрдЧ рд╕реЗ RegisterWaitForSingleObject рд╡рд┐рдзрд┐ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рд╣рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ рдЯрд╛рд╕реНрдХ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЖрдк рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЯрд╛рд╕реНрдХрдлреИрдХреНрдЯреНрд░реА рд╡рд░реНрдЧ рд╕реЗ FromAsync рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдерд╛ рдЬреЛ рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рдереАред рдпрд╣рд╛рдВ, рд╣рдореЗрдВ рдкрд┐рдЫрд▓реЗ 15 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ Microsoft рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЙрдбрд▓ рдХрд╛ рдкреВрд░рд╛ рдЗрддрд┐рд╣рд╛рд╕ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛: рдЯрд╛рд╕реНрдХ-рдЖрдзрд╛рд░рд┐рдд рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреИрдЯрд░реНрди (TAP) рд╕реЗ рдкрд╣рд▓реЗ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреИрдЯрд░реНрди (APP) рдереЗред APPs рд╕рднреА рд╢реБрд░реБрдЖрддреА DoSomething рд▓реМрдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЗ IAsyncResult рдФрд░ рдЕрдВрдд DoSomething рд╡рд┐рдзрд┐ рдЬреЛ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ - рдФрд░ FromAsync рд╡рд┐рдзрд┐ рдЗрди рд╡рд░реНрд╖реЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рд╕рдордп рдмреАрддрддрд╛ рдЧрдпрд╛, рдЗрд╕реЗ рдЗрд╡реЗрдВрдЯ рдЖрдзрд╛рд░рд┐рдд рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреИрдЯрд░реНрди (рдИрдПрдкреА) рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдПрдХ рдШрдЯрдирд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИредрдЯрд╛рд╕реНрдХ рдХреЙрдордкреНрд▓реЗрдХреНрд╢рди рд╕реЛрд░реНрд╕ рдЗрд╡реЗрдВрдЯ рдореЙрдбрд▓ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдирд┐рд░реНрдорд┐рдд рд▓реАрдЧреА рдПрдкреАрдЖрдИ рдХреЛ рдЯрд╛рд╕реНрдХ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЯрд╛рд╕реНрдХ рдирд╛рдордХ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЯрд╛рд╕реНрдХ рдХреЙрдордкреНрд▓реЗрдХреНрд╢рди рд╕реНрд░реЛрдд (рд╕реЗрдЯрдСрдиреЙрд▓реНрдЯ, рд╕реЗрдЯрдПрдХреНрд╕рд╕реЗрдкреНрд╢рди рдЖрджрд┐) рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд┐рди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛рд░рдд рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕реЗ рдЯрд╛рд╕реНрдХ рдХреЙрдордкреНрд▓реЗрдХреНрд╢рди рд╕реЛрд░реНрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╡рд┐рдзрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдпрд╛ рдХреНрд░реИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рдмреЗрд╣рддрд░ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдХреЛрдб рдХреЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред рдпрд╣рд╛рдВ, рдИрдПрдкреА рдпреБрдЧ рдХреЗ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рдПрдкреАрдЖрдИ рдЯрд╛рд╕реНрдХ рдХреЙрдордкреНрд▓реЗрдХреНрд╢рди рд╕реЛрд░реНрд╕ рдХреА рдорджрдж рд╕реЗ рдЯрд╛рд╕реНрдХ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реБрдП рд╣реИрдВ: рдЬрдм рдХреЛрдИ рдШрдЯрдирд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рддреЛ рдЯрд╛рд╕реНрдХ рдХреЛ рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рдЗрд╕ рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдСрдкрд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рдЬрд╛рд░реА рд░рдЦреЗрдЧреА
рдкрд░рд┐рдгрд╛рдо рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред
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 рдЯрд┐рдкреНрд╕ рдФрд░ рдЯреНрд░рд┐рдХреНрд╕
TaskCompletionSource рдХреЗрд╡рд▓ рдЕрдкреНрд░рдЪрд▓рд┐рдд API рдХреЛ рд▓рдкреЗрдЯрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдЯрд╛рд╕реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИ рдЬреЛ рдереНрд░реЗрдбреНрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдзрд╛рдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдорд╣рдВрдЧрд╛ рд╕рдВрд╕рд╛рдзрди рд╣реИ рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рд░реИрдо рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИред рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдордЬрдмреВрдд рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реБрдП рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕ рд╕реАрдорд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рд▓реЙрдиреНрдЧ рдкреЛрд▓рд┐рдВрдЧ рдХреЗ рдирд╛рдо рд╕реЗ рдЬрд╛рдиреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдл-рд╕реБрдерд░реА рдЯреНрд░рд┐рдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдореИрдВрдиреЗ рдЬрд┐рди рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рджреЗрдЦреЗрдВред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рд╣реИ рдХрд┐ рд▓рд╛рдВрдЧ рдкреЛрд▓рд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ:рдЖрдкрдХреЛ рдПрдкреАрдЖрдИ рдХреА рдУрд░ рд╕реЗ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдЖрдкрдХреЛ рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдПрдХ рд░рд╛рдЬреНрдп рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг WebSocket рдХреЗ рд╕рд╛рдордиреЗ рдЖрдиреЗ рдпрд╛ рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, HTTP рд╕реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА API рд╣реЛрдЧрд╛ред рдХреНрд▓рд╛рдЗрдВрдЯ HTTP рд╕рд░реНрд╡рд░ рд╕реЗ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, HTTP рд╕рд░реНрд╡рд░ рд╕реНрд╡рдпрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдкрд░реНрдХ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рд░рд▓рддрдо рд╕рдорд╛рдзрд╛рди рд╕рдордп-рд╕рдордп рдкрд░ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреВрдЫрдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рдкреИрджрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рджреЗрд░реА рдЬреЛ рд▓рдЧрднрдЧ TimerInterval / 2 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Long Polling рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрдм рддрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдХреЛрдИ рдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рддрдм рддрдХ рдпрд╣ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджреЗрд░реА рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдШрдЯрдирд╛ рдШрдЯрддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛; рдпрджрд┐ рдирд╣реАрдВ - рдЕрдиреБрд░реЛрдз рдлрд┐рд░ рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред 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); } }
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, AcceptMessageAsync рд╡рд┐рдзрд┐ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╛рдкреНрдд рдЯрд╛рд╕реНрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╕рдмрд╕реЗ рдЖрдо рд╣реИ, рддреЛ рд╣рдо ValueTask рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЬрдм рдХреЛрдИ рд╕рдВрджреЗрд╢ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ TaskCompletionSource рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд░рдЦреЗрдВ, рдФрд░ рдлрд┐рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ: рдпрд╛ рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рд╡реНрдпрддреАрдд рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
ValueTask: рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ
async / рдкреНрд░рддреАрдХреНрд╖рд╛рд░рдд рдкрд░рд┐рдЪрд╛рд▓рдХ, рдкреИрджрд╛рд╡рд╛рд░ рд╡рд╛рдкрд╕реА рд╕рдВрдЪрд╛рд▓рдХ рдХреА рддрд░рд╣, рдПрдХ рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдирд╛ - рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХреБрдЫ рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдорд▓рд╛ рдЕрдХреНрд╕рд░-рддрдерд╛рдХрдерд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рд╣рдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рджрд╕рд┐рдпреЛрдВ рдФрд░ рд╕реИрдХрдбрд╝реЛрдВ рд╣рдЬрд╛рд░реЛрдВ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдзрд┐ рдПрдХ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рднреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреА рд╣реИред .NET рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдХреВрд▓рди рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - ValueTask рд╕рдВрд░рдЪрдирд╛ред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдХреИрд╢ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдореВрд▓реНрдп рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВ; рдЕрдЧрд░ рдХреЛрдИ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИрдВ - рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдзреАрдореА рдЧрддрд┐ рд╕реЗ IO рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдкреВрд░реА рд╡рд┐рдзрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрдЧреАред рддреЛ, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:
public async Task<string> GetById(int id) { if (cache.TryGetValue(id, out string val)) return val; return await RequestById(id); }
рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рд░реЛрдЬрд▓рд┐рди рдХреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде, рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
public Task<string> GetById(int id) { if (cache.TryGetValue(id, out string val)) return Task.FromResult(val); return RequestById(id); }
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдо-рдкрде рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдмрд┐рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЖрд╡рдВрдЯрди рдХреЗ рд╕рд╛рде рд╢рдмреНрджрдХреЛрд╢ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЬреАрд╕реА рдкрд░ рдХреЛрдИ рднрд╛рд░ рдирд╣реАрдВред рдЗрд╕ рдмреАрдЪ, рдЙрди рдЕрдиреИрддрд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рд╣рдореЗрдВ IO рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЪреАрдЬреЗрдВ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд░рд╣реЗрдВрдЧреА:
public ValueTask<string> GetById(int id) { if (cache.TryGetValue(id, out string val)) return new ValueTask<string>(val); return new ValueTask<string>(RequestById(id)); }
рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦреЗрдВ: рдпрджрд┐ рдХреЛрдИ рдореВрд▓реНрдп рдХреИрд╢ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВрдЧреЗ; рдЕрдиреНрдпрдерд╛, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдПрдХ ValueTask рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрд┐рд╕ рдкрде рд╕реЗ рдпрд╣ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ: C # рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ, рдПрдХ рд╡реИрд▓реНрдпреВрдЯреИрд╕реНрдХ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред
TaskScheduler: рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛
рдореИрдВ рдЬрд┐рд╕ рдЕрдЧрд▓реЗ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ, рд╡рд╣
рдЯрд╛рд╕реНрдХрд╕рд┐рдбреНрдпреВрд▓рд░ рд╡рд░реНрдЧ рд╣реИ рдФрд░ рдЬреЛ рдЗрд╕рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рд╣реИрдВред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЯреАрдкреАрдПрд▓ рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рд╕реНрдХ рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЗрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рдЯрд╛рд╕реНрдХрд╕рд┐рдбреНрдпреВрд▓рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд░рдгрдиреАрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╣рдореЗрдВ
ParallelExtensionsExtras рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА Microsoft рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ .NET рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ - рдмрд▓реНрдХрд┐, рдЗрд╕реЗ Nuget рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдЗрдП рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХреБрдЫ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдкрд░:
- CurrentThreadTaskScheduler - рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдкрд░ рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ
- LimitedConcurrencyLevelTaskScheduler - рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП N рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╡рд░реНрддреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд╛рд░реНрдп рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ
- OrderedTaskScheduler - LimitedConcurrencyLevelTaskScheduler (1) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
- WorkStealingTaskScheduler - рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп -рдЪреЛрд░реА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдбрдкреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдереНрд░реЗрдбрдкреВрд▓ рдХреЗ .NET рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд╣реЛрдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИ - рдпрджрд┐ рдпрд╣ рдЖрд╡реЗрджрди рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЕрддрд┐рднрд╛рд░рд┐рдд рдпрд╛ рдЕрдиреБрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд╛рди рдкрд░ рдЕрдкреНрд░рд┐рдп рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рджреЛрд╖реЛрдВ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрд╡реЗрджрди рдХреЗ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдХрд╕реНрдЯреАрд▓рд┐рдВрдЧрдЯреИрд╕реНрдХрд╢реЙрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд╣рд╛рдВ рдереНрд░реЗрдбрдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдХреНрд░рд╛рдордХ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- QueuedTaskScheduler - рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдХрддрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
- ThreadPerTaskScheduler - рдЙрд╕ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдкреНрд░рддреНрдпреЗрдХ рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Microsoft рдХреЗ рдмреНрд▓реЙрдЧ рдкрд░ TaskSchedulers рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛
рд▓реЗрдЦ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЖрдЬрд╝рд╛рдж рдХрд░реЗрдВред
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ, рдПрдХ рдЯрд╛рд╕реНрдХ рд╡рд┐рдВрдбреЛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЯрд╛рд╕реНрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣рд░ рдЪреАрдЬ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред рдЗрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдЖрдк рдХрд╛рд░реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдб рдХреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд▓рд╛рдЗрди рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

PLinq рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд░реНрдЧ
рдЯрд╛рд╕реНрдХ рдФрд░ рдЙрдирд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, .NET рдореЗрдВ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреВрд▓ рд╣реИрдВред рд╣рдо рджрд┐рд▓рдЪрд╕реНрдк -
PLinq (Linq2Parallel) рдФрд░ рдкреИрд░реЗрд▓рд▓
рдХреНрд▓рд╛рд╕ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдПрдХ рд╕рднреА рдзрд╛рдЧреЗ рдкрд░ рд╕рднреА Linq рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ред рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ WithDegreeOfParallelism рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЛрдб рдореЗрдВ PLinq рдореЗрдВ рдЧрддрд┐ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрдЧреАред рджреВрд╕рд░реА рдУрд░, рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдмрд╣реБрдд рдХрдо рд╣реИ: рдЖрдкрдХреЛ рдХреЗрд╡рд▓
рд▓рд┐рдирдк рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдкрд╣рд▓реЗ
AsParallel рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╡рд┐рднрд╛рдЬрди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ PLinq рдХреЛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк
рдпрд╣рд╛рдБ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреИрд░реЗрд▓рд▓ рд╕реНрдЯреЗрдЯрд┐рдХ рдХреНрд▓рд╛рд╕ рдлреЙрд░рдЪреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝реЙрд░ рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд▓рд╛рдиреЗ рдФрд░ рдЗрдирд╡реЛрдХ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЧрдгрдирд╛ рд╣реЛрдиреЗ рддрдХ рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ ParallelOptions рдкрд╛рд╕ рдХрд░рдХреЗ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯрд╛рд╕реНрдХрд╕реБрдбрд░ рдФрд░ рдХреИрдВрд╕рд┐рд▓реЗрд╢рдирдЯреЛрдХрди рдХреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдорджрдж рд╕реЗ рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рд░рд╛рдВрд╢
рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдиреА рдереАрд╕рд┐рд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдореБрдЭреЗ рдЬреЛ рдЬреНрдЮрд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВрдиреЗ рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдЗрддрдиреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреАред рдЕрдм, рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдиреЗ рдореБрдЭреЗ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рд▓рдЧрднрдЧ 15 рдкреГрд╖реНрда рд▓рд┐рдЦ рдЪреБрдХрд╛ рд╣реВрдВ, рдореИрдВ рдПрдХ рдордзреНрдпрд╕реНрде рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╣рдо рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ, рдПрдкреАрдЖрдИ, рджреГрд╢реНрдп рдЙрдкрдХрд░рдг рдФрд░ рдЫрд┐рдкреЗ рд╣реБрдП рдЦрддрд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред
рдирд┐рд╖реНрдХрд░реНрд╖:- рдЖрдзреБрдирд┐рдХ рдкреАрд╕реА рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдереНрд░реЗрдбреНрд╕, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░рд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
- .NET рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдИ рдЯреВрд▓ рд╣реИрдВ
- рдЙрди рд╕рднреА рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЕрдХреНрд╕рд░ рдХреБрдЫ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдереЛрдбрд╝реЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рдиреЗ рдПрдкреАрдЖрдИ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред
- .NET рдореЗрдВ, рдереНрд░реЗрдб рдФрд░ рдереНрд░реЗрдбрдкреВрд▓ рдХрдХреНрд╖рд╛рдПрдВ рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВ
- Win32 API рдлрд╝рдВрдХреНрд╢рди рдЯрд░реНрдорд┐рдиреЗрдЯреНрд░реЗрдб рдХреЗ рд╕рд╛рде рдереНрд░реЗрдб.рдПрдмреЛрд░реНрдЯ рдФрд░ рдереНрд░реЗрдб.рдЗрдВрдЯрд░рд░реЗрдЯ рд╡рд┐рдзрд┐ рдЦрддрд░рдирд╛рдХ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ
- рдзрд╛рдЧреЗ рдПрдХ рдореВрд▓реНрдпрд╡рд╛рди рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ рдФрд░ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рд╣реИред рдЖрдкрдХреЛ рдЙрди рдорд╛рдорд▓реЛрдВ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдХреЗ рдзрд╛рдЧреЗ рдХрд╛ рдХрдмреНрдЬрд╛ рд╣реЛрддрд╛ рд╣реИред TaskCompletionSource рд╡рд░реНрдЧ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
- рдХрд╛рд░реНрдп рд╕рдорд╛рдирддрд╛ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдордЬрдмреВрдд рдЯреВрд▓ .NET рд╣реИред
- рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рд╕реА # рдСрдкрд░реЗрдЯрд░ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ
- рдЖрдк рдХрд╛рд░реНрдп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЯрд╛рд╕реНрдХрд╕реНрдХреНрд░реВрдбрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдЯрд╛рд╕реНрдХ рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
- ValueTask рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЙрдЯ-рдкрд╛рде рдФрд░ рдореЗрдореЛрд░реА-рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЯрд╛рд╕реНрдХ рдФрд░ рдереНрд░реЗрдбреНрд╕ рд╡рд┐рдВрдбреЛ рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдпрд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ
- PLinq рдПрдХ рднрдпрд╛рдирдХ рдЙрдкрдХрд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдЬрд┐рд╕реЗ рдЕрднреА рднреА рд╡рд┐рднрд╛рдЬрди рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ...