рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реЛрдирд╛ред "рдкреВрд░реНрдг рд╕рдорд╛рдирддрд╛" рдХрд╛ рдорд╛рдорд▓рд╛ред рднрд╛рдЧ реи

.NET 4 рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди



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



"рдЖрджрд░реНрд╢" рдЫреЛрд░реЛрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рджрд┐рдП рдЧрдП рд╣реИрдВ:









Parallel.For рдФрд░ Parallel.ForEach Methods



рдЖрдЗрдП рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд░реНрдЧ рдФрд░ рдЗрд╕рдХреЗ рд▓реВрдк рд╕рдВрдЧрдарди рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦрдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред



рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ (рдпрд╣ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдПрдХ рд╣реИ, рдХрдИ рдЕрддрд┐рднрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ):



  1. public static ParallelLoopResult For ( int fromInclusive, int toExclusive, Action < int > body ) ;







рдпрд╣ рд░рд┐рдЯрд░реНрди рдореВрд▓реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рд╣рдорд╛рд░реЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рддрд░реАрдХреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рдорд╛рди рдХрдИ рдорд╛рдпрдиреЛрдВ рдореЗрдВ рд╣реИред



рджреВрд╕рд░рд╛ "рдмреБрдирд┐рдпрд╛рджреА рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ" рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:



  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ ParallelLoopResult ForEach < TSource > ( IEnumerable < TSource > рд╕реНрд░реЛрдд, Action < TSource > body ) ;




рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ Parallel.For рдФрд░ Parallel.ForEach рд╡рд┐рдзрд┐рдпрд╛рдБ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреА рд╣реИрдВред



рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧред рдпрджрд┐ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдирдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдЕрдм рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдлрд┐рд░ рднреА, рд╡реЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ (рдЕрдВрддрд┐рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдФрд░ рд╕рдВрднрд╡ рдмрд╛рдж рдХреЗ рдЕрдкрд╡рд╛рдж) рдХреЛ рдПрдЧреНрд░реАрдЧреЗрдЯрдПрдХреНрд╕реИрдкреНрд╢рди рдХреЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдЪрдХреНрд░ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡реНрдпрд╡рдзрд╛рдиред рдлрд╝реЙрд░реЗрд╕реНрдЯ рдкрджреНрдзрддрд┐ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдзрд┐рднрд╛рд░ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╕реНрдЯреЙрдк рдпрд╛ рдмреНрд░реЗрдХ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ (рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд)ред



рд╕реНрдЯреЙрдк рдФрд░ рдмреНрд░реЗрдХ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯреЙрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдирдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмреНрд░реЗрдХ - рдирдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд (рдХреНрд░рдо рдореЗрдВ) рдЬрд┐рд╕рдореЗрдВ рдмреНрд░реЗрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЬрдм 5 рд╡реАрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдмреНрд░реЗрдХ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╕рдорд╛рдирддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, 1 рд╕реЗ 4 рд╡реЗрдВ рддрдХ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрднреА рднреА рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЬрдм рд╕реНрдЯреЙрдк рдХреЛ 5 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ 4 рдЕрднреА рддрдХ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рдпрд╣ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред



рд╡рд░реНрддрдорд╛рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯреЙрдк рдпрд╛ рдмреНрд░реЗрдХ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рдордп рдЪрд▓ рд░рд╣реЗ рдереЗ, рдЪрдХреНрд░ рдХреА рд░реБрдХрд╛рд╡рдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡реЗ рдкреВрд░реЗ рдЪрдХреНрд░ рдХреЗ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрддреЗ рд╣реИрдВ рддреЛ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: IsStopping рдФрд░ LowestBreakIterationред



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



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



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



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



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



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



рд╕рдорд╛рдирд╛рдиреНрддрд░ рд╕рдорд╛рдирд╛рдВрддрд░





.NET 3.5 рдореЗрдВ рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, System.Core рдореЗрдВ .NET 4.0 рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ LINQ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рд╣рдо .As рд╕рдорд╛рдирд╛рдВрддрд░ () рдХреЙрд▓ рдХреЛ LINQ рдХреНрд╡реЗрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рднреА рдмрд╛рдж рдХреЗ рдХреЙрд▓ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:



  1. var рджреЛрдЧреБрдиреА = рдирдИ [ ] { рез , реи , рей , рек } ред AsParallel ( ) ред рдЪрдпрди рдХрд░реЗрдВ ( i => i * 2 ) ;




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



  1. var рджреЛрдЧреБрдиреА = рдирдИ [ ] { рез , реи , рей , рек } ред AsParallel ( ) ред AsOrdered ( ) ред рдЪрдпрди рдХрд░реЗрдВ ( i => i * 2 ) ;




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



рдкреАрдПрд▓рдЖрдИрдПрдирдХреНрдпреВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдУрд╡рд░рд╣реЗрдб рд╣реИ
  1. рдкреНрд░рд╡рд╛рд╣ рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рдЧрдгрдирд╛ рдХреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХрд╛ рд╡рд┐рддрд░рдг
  2. рдПрдХ рдЖрдо рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЧрдгрдирд╛ рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХрддреНрд░реАрдХрд░рдгред


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



AsParallel () рдореЗрдердб IEnumerable рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ ParallelEnumerable рджреЗрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж рдЕрдиреНрдп рд╕рднреА LINQ рдореЗрдердб (Select, Where, etc.) рднреА рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред рдЬрдм рддрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ ParallelEnumarable рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд╛рд╣ рдХреА рдЧрдгрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред



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



  1. рд╕реВрдЪреА < InputData > inputData = ... ;
  2. foreach ( рдЗрдирдкреБрдЯ рдУрдЯрд╛рдЯрд╛ рдореЗрдВ var oред AsParallel ( ) ред Select ( i => new OutputData ( i ) )
  3. {
  4. рдкреНрд░реЛрд╕реЗрд╕рдСрдЯрдкреБрдЯ ( рдУ ) ;
  5. }




рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рдХреЗрд╡рд▓ OutputData рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╕рднреА рдкреНрд░рд╡рд╛рд╣ рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП ProcessOutput () рдХреЛ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдлреИрд▓рд╛рдПрдВрдЧреЗред



рдпрд╣рд╛рдВ рдПрдХрддреНрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрджрдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк ParallelEnumarable.ForAll () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



  1. рд╕реВрдЪреА < InputData > inputData = ... ;
  2. inputDataред AsParallel ( ) ред рдЪреБрдиреЗрдВ ( i => рдирдпрд╛ рдЖрдЙрдЯрдкреБрдЯрдбреЗрдЯрд╛ ( i ) ) ред ForAll ( o =>)
  3. {
  4. рдкреНрд░реЛрд╕реЗрд╕рдСрдЯрдкреБрдЯ ( рдУ ) ;
  5. } ;




рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдирдП рдЖрдЙрдЯрдкреБрдЯрдбреИрдЯ (i)" рдЪрд░рдг рдХреЗ рдмрд╛рдж, "рдкреНрд░реЙрд╕реЗрд╕рдСрдЯрдкреБрдЯ (рдУ)" рдЪрд░рдг рдХреЛ рднреА рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЙрдирдХреЗ рдмреАрдЪ рдПрдХрддреНрд░реАрдХрд░рдг рдЪрд░рдг рдХреЗ рдмрд┐рдирд╛ред



рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ "inputData.AsParallel () рдХреЗ рд▓рд┐рдП Parallel.ForEach () рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ редSelect (i => new OutputData (i))" рдореЗрдВ рд╕рдорд╛рди рдЖрд╡рд░реНрддреА рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдЦрд╛рдореА рд╣реЛрдЧреА: Parallel.ForEach () рдореЗрдВ IEnumerable рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, ParallelEnumerable рдирд╣реАрдВ - рдЗрд╕рд▓рд┐рдП, Parallel.ForEach () рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕реЗ рдПрдХрддреНрд░рд┐рдд рдХрд░ рджреЗрдЧрд╛ред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, ParallelEnumerable.ForAll () рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред



рдЖрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ



рдЗрди рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред



рджреЗрд╢реА рдзрд╛рдЧрд╛ рд╕реБрд░рдХреНрд╖рд╛


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ Parallel.ForEach рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХрд╛ рдХреЛрдб рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдпрд╛, рдпрджрд┐ рд╡реЗ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░реЗрдВред



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



рдЪрдХреНрд░ рд╢рд░реАрд░ рдХреЗ рдЖрдпрд╛рдо


рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдУрд╡рд░рд╣реЗрдб рд╢рд╛рдорд┐рд▓ рд╣реИ





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



рдЖрдк рдмреНрд▓реЙрдХ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддреЛрдбрд╝рдХрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╕реЗрдЯ рдкрд░ рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдЪрдХреНрд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╕рдорд╛рдирд╛рдВрддрд░ рдЪрдХреНрд░ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЗрди рдмреНрд▓реЙрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлреИрд╕рд▓рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реМрдВрдк рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рд╕рдмрд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: System.Concurrent.Collections.Partitionerред



рдпрд╣ рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛



  1. for ( int i = 0 ; рдореИрдВ < рд▓рдВрдмрд╛рдИ ; i ++ )
  2. рдкрд░рд┐рдгрд╛рдо [ i ] = i * i ;




рднреЛрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрдЬрд╛рдп:



  1. рд╕рдорд╛рдирд╛рдВрддрд░ред рдХреЗ рд▓рд┐рдП ( рд╕реЗ, рдХреЛ, рдореИрдВ =>
  2. {
  3. рдкрд░рд┐рдгрд╛рдо [ i ] = i * i ;
  4. } ;




рдЗрд╕ рддрд░рд╣ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



  1. рд╕рдорд╛рдирд╛рдВрддрд░ред ForEach ( рд╡рд┐рднрд╛рдЬрдирдХрд░реНрддрд╛ ред рдмрдирд╛рдПрдБ ( рд╕реЗ, рд╕реЗ ) , рд╢реНрд░реЗрдгреА =>
  2. {
  3. for ( int i = rangeред Item1 ; i < рд░реЗрдВрдЬред Item2 ; i ++ )
  4. {
  5. рдкрд░рд┐рдгрд╛рдо [ i ] = i * i ;
  6. }
  7. } ;




Partitioner.Create (рд╕реЗ), рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдПрдХ рд╣реА рд╕реЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдорд╛рдирд╛рдВрддрд░, рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓реВрдк рдмреЙрдбреА рдХреЗ рдЕрдВрджрд░ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдПрдХ рд▓рдВрдмреЗ рд╢рд░реАрд░ рдХреЛ рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдЪрдХреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд╣реЗрдб рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред



рдиреЗрд╕реНрдЯреЗрдб рд▓реВрдк рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг


рдиреЗрд╕реНрдЯреЗрдб рд▓реВрдк рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рд░реВрдк рд╕реЗ рдпрд╣ рдХрд┐рддрдиреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рд▓рд╛рдпрдХ рд╣реИред рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рдЫрд╡рд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ:



  1. рдХреЗ рд▓рд┐рдП ( int y = 0 ; y < рд╕реНрдХреНрд░реАрдирд╣рд╛рдЗрдЯ ; y ++ )
  2. {
  3. int stride = y * screenWidth ;
  4. ( int x = 0 ; x < screenWidth ; x ++ ) рдХреЗ рд▓рд┐рдП
  5. {
  6. рдЖрд░рдЬреАрдмреА [ рдПрдХреНрд╕ + рд╕реНрдЯреНрд░рд╛рдЗрдб ] = рдХреИрд▓реНрдХрд▓рд░ ( рдПрдХреНрд╕, рд╡рд╛рдИ ) ; // рд░рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ
  7. }
  8. } ;




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



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



рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ рдПрдХ рдореЗрдВ рджреЛ рдиреЗрд╕реНрдЯреЗрдб рдЫреЛрд░реЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:



  1. int TotalPixels = screenHeight * screenWidth ;
  2. рд╕рдорд╛рдирд╛рдВрддрд░ред рдХреЗ рд▓рд┐рдП ( 0 , TotalPixels, i =>
  3. {
  4. int y = i / screenWidth, x = i % screenWidth ;
  5. рдЖрд░рдЬреАрдмреА [ i ] = рдХреИрд▓реНрдХрдХрд▓рд░ ( рдПрдХреНрд╕, рд╡рд╛рдИ ) ;
  6. } ;




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



  1. int TotalPixels = screenHeight * screenWidth ;
  2. рд╕рдорд╛рдирд╛рдВрддрд░ред ForEach ( рд╡рд┐рднрд╛рдЬрдХред Create ( 0 , TotalPixels ) , рд╢реНрд░реЗрдгреА =>
  3. {
  4. for ( int i = rangeред Item1 ; i < рд░реЗрдВрдЬред Item2 ; i ++ )
  5. {
  6. int y = i / screenWidth, x = i % screenWidth ;
  7. рдЖрд░рдЬреАрдмреА [ i ] = рдХреИрд▓реНрдХрдХрд▓рд░ ( рдПрдХреНрд╕, рд╡рд╛рдИ ) ;
  8. }
  9. } ;




рдЕрд╕реБрд░рдХреНрд╖рд┐рдд IList рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


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



рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдПрдХ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдЗрдВрдбреЗрдХреНрд╕рд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рддрддреНрд╡реЛрдВ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЯрд┐рд▓ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрд▓рд╕реА рдХреЛ рднреА рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрд╕реЗ IList рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЦреБрдж рдХреЛ IEnumerable рддрдХ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред



рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рд╡рд┐рдХрд▓реНрдк рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ System.Collections.Concurrent.Partitioner рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ:



  1. // IList <T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рд╕рдВрдЧреНрд░рд╣ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ
  2. IEnumerable < T > рд╕реНрд░реЛрдд = ... ;
  3. рд╕рдорд╛рдирд╛рдВрддрд░ред ForEach ( рд╕реНрд░реЛрдд, рдЖрдЗрдЯрдо => { /*..рдЖрдИрдПрдордЖрдИ }} ) ;
  4. // рдФрд░ рдпрд╣рд╛рдБ IEnumerable <T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЧрдИ рд╣реИ
  5. IEnumerable < T > рд╕реНрд░реЛрдд = ... ;
  6. рд╕рдорд╛рдирд╛рдВрддрд░ред ForEach ( рд╡рд┐рднрд╛рдЬрдирдХрд░реНрддрд╛ ред рдХреНрд░рд┐рдПрдЯ ( рд╕реНрд░реЛрдд ) , рдЖрдЗрдЯрдо => { /*..рдЖрдИрдПрдордЖрдИ }} ;




рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп LINQ рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рд╣реИ: рдмрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░реЗрдВ ".Select (рдЖрдЗрдЯрдо => рдЖрдЗрдЯрдо)"ред рдпрд╣ Parallel.For рдФрд░ PLINQ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ:



  1. // рдпрд╣ рднреА IEnumerable <T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ
  2. рд╕реНрд░реЛрддред рдЪреБрдиреЗрдВ ( i => i ) ред AsParallel ( ) ред рдЪрдпрди рдХрд░реЗрдВ ( i => { /*...*/ } ) ;




рд╕реНрд░реЛрдд рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдб рдЖрддреНрдореАрдпрддрд╛


рдЬрдм Parallel.ForEach рдФрд░ PLINQ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рд╕реНрд╡рдпрдВ рдХреЛ рд╕реНрд░реЛрдд рд╕рдВрдЧреНрд░рд╣ рдкрд░ MoveNext () рдХрд╣рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрдЧреНрд░рд╣ рдРрд╕рд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рд╕рдВрднрд╡ рд╣реИ (рдЗрд╕рдореЗрдВ "рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдЖрддреНрдореАрдпрддрд╛ рд╣реИ"), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо рдпрд╛ рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл рдореЗрдВ рдпреВрдЖрдИ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реАрдзреЗ рдЗрди рддрдВрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред



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



PS рдпрд╣ рд▓реЗрдЦ " PATTERNS OF PARALLEL PROGRAMMING: UNDERSTANDING AND APPLYING PARALLEL PATTERNS with THE .NET FRAMEWORK 4 рдФрд░ VISUAL C " рдкреБрд╕реНрддрдХ рдХреЗ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рдж рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



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



рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рджреМрд░рд╛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рддреЗ рд╕рдордп рдЕрдкрдиреА рдЦреБрдж рдХреА рдХрдо рдЧрд▓рддрд┐рдпрд╛рдВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рд╕рдлрд▓ рдбрд┐рдмрдЧрд┐рдВрдЧ, рдФрд░ рдЦреБрд╢ рдЫреБрдЯреНрдЯреА :)



рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП



рдмреНрдпрд╛рдЬ рд╣реЛрдиреЗ рдкрд░ рдореИрдВ 4 рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╕рдорд╛рдирддрд╛ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:



рдпрд╣ рд▓рд┐рдЦреЗрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рд╣рдж рддрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ :)



All Articles