рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд▓реЗрдЦ
IEnumerable
рд╕рдорд╛рдирд╛рдВрддрд░ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рднреА рдХрд┐ рдРрд╕рд╛ рдХрд╛рд░реНрдп рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖред
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдЖрдВрддрд░рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, рдбреЗрдЯрд╛ рд╕рд░рдгреА рдкрд░ 100+ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрддреНрддреЗрджрд╛рд░ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрдврд╝рдиреЗ рдореЗрдВ 12 рдШрдВрдЯреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдбреЗрдЯрд╛ рд╡реЙрд▓реНрдпреВрдо рд╕реНрд╡рдпрдВ рднреА рдмрдбрд╝реЗ рд╣реИрдВред рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрдврд╝рдиреЗ рдФрд░ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрдпреЛрдЬрди (~ 1.5M tuples, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рд╡рдЬрди 50 рдПрдордмреА рддрдХ рд╣реИ) рдХреЛрдб рдореЗрдВ рджреЛ рд╕реАрдорд╛рдУрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ: рдХрдИ рд░реАрдбрд┐рдВрдЧ рдХреА рдЪрд░рдо рдЕрд╡рд╛рдВрдЫрдиреАрдпрддрд╛ (рдХреЛрдИ рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рд░рд┐рдкреЛрд░реНрдЯ рдкрд░ 50 рджрд┐рди рдмрд┐рддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ) рдФрд░, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдкреВрд░реЗ рдирдореВрдиреЗ рдХреЛ рд░реИрдо рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬреЛ рдореБрдЭрд╕реЗ рдкрд╣рд▓реЗ рдереА рд╡рд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдереА: рдЬрд┐рд╕ рд╡рд┐рдзрд┐ рд╕реЗ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЙрд╕рдХреА рд▓рдВрдмрд╛рдИ рд▓рдЧрднрдЧ 4000 рд▓рд╛рдЗрдиреЗрдВ рдереАред рдореЗрд░рд╛ рдХрд╛рдо рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдорд░реНрдерд┐рдд рдХреЛрдб рдореЗрдВ рдмрджрд▓рдирд╛ рдерд╛ред
рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ
рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрд░рд╛рдбрдиреЗ рдХрд╛ рд╕реВрддреНрд░ рдпрд╣ рдЕрд╣рд╕рд╛рд╕ рдерд╛ рдХрд┐ "рдЪрд╛рдЯ" рдПрдХ рдФрд░ рдПрдХ рд╣реА рдЗрдХрд╛рдИ (рд╕рд╛рде рд╣реА рд▓реЙрд▓реАрдкреЙрдк) рдХрдо рд╕реЗ рдХрдо рдмрджрд╕реВрд░рдд рд╣реИ: рднрд▓реЗ рд╣реА рдореИрдВ "рд╕реНрд▓рд╛рдЗрд╕ рдкрджреНрдзрддрд┐" рд░рд╛рдЬреНрдп рдореЗрдВ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рджреЗрди рд▓рдЧрд╛рддрд╛рд░ рд╕реИрдХрдбрд╝реЛрдВ рдХреЙрд▓ рдХреА рдПрдХ рд╢реАрдЯред рдореИрдВ рднреА рдЗрд╕рд╕реЗ рджреВрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рди рдХреЗрд╡рд▓ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдкрдврд╝рдиреЗ рдкрд░ рдЖрд░рд╛рдо рджрд┐рдпрд╛, рдмрд▓реНрдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдкрд░реНрдЪреА рднреА рдЬреЛрдбрд╝ рджреАред рдЬрд┐рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓ рд░рд╣реА рд╣реИ, рдЙрд╕рдореЗрдВ 8 рдХреЛрд░ рд╣реИрдВ рдФрд░ рдпрд╣ рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдРрд╕реА рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЕрдЧрд▓реА рдЯреНрдпреВрдкрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдХрдо рд╕рдордп рд▓рдЧреЗрдЧрд╛ред
рд╡рд┐рдЪрд╛рд░
рдЗрд╕рд▓рд┐рдП, рдореМрдЬреВрджрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ рддреМрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдЪрд╛рд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛: рд╕рдорд╛рдирд╛рдВрддрд░ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ "рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕реНрдЯреНрд░реАрдо" рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд▓рд╛рдЗрд╕ рдХреА рдЕрдкрдиреА рд╕рд╛рдл-рд╕реБрдерд░реА рд╡рд┐рдзрд┐ (рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛) рд╣реЛрддреА рд╣реИ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧреЗ рдореЗрдВ рдЪрд▓рддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП
IEnumerable<T>
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ "рд╡рд╕реНрддреБрдУрдВ рдХреА рдзрд╛рд░рд╛" рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдерд╛ред рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХрд╛ рдЕрдкрдирд╛
IEnumerable<T>
, рдФрд░ рдпрд╣ рд╡рд╣реА
IEnumerable<T>
(рдмрд╕
рд╕рд┐рдХреНрдХреЛрдВ рдФрд░ рдЪрд╢реНрдореЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рддрд░рд╣)ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЙрдкрдирд╛рдо "рдХреНрд▓реЛрди" рддреБрд░рдВрдд рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдЪрд┐рдкрдХ рдЧрдпрд╛ред
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ
enumerable.Next()
, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рднреА рдЙрджрд╛рд╣рд░рдг рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХ рдЦрд╝рд╛рд╕рд┐рдпрдд рд╣реИ (рдпрд╣ рдмрд▓реНрдХрд┐ рдПрдХ рдЛрдг рд╣реИ, рд▓реЗрдХрд┐рди рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ): рд╕рднреА рдзрд╛рдЧреЗ рд╕рдмрд╕реЗ рдзреАрдореЗ рднрд╛рдИ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рдд, рдкрдврд╝рдирд╛ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрдЧрд╛ред рд╕рдЪ рдХрд╣реВрдВ рддреЛ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Microsoft рдиреЗ рдЕрдкрдиреЗ Parallel.Linq рдореЗрдВ рдРрд╕рд╛ рд╣реА рдХреБрдЫ рдХрд┐рдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЙрд╕ рд╕рдордп рдРрд╕рд╛ рдХреБрдЫ рднреА Google рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ - рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдм рдХреБрдЫ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Parallel.For()
) рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ - рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЦреИрд░, рдореБрдЭреЗ рд╕рд╛рдЗрдХрд┐рд▓ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИ, рдореЗрд░реЗ рд╣рд╛рде рдореЗрдВ рдПрдХ рдлрд╛рдЗрд▓ рд╣реИ!
рдХреЛрд░ рд╕рдорд╛рдзрд╛рди
рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдпрд╣ рд╕рдордЭ рдереА рдХрд┐ рдХрд┐рд╕реА рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреАрдЫреЗ рдПрдХ рд╡рд╕реНрддреБ рдЫрд┐рдкреА рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрднрд╡рддрдГ рд╡рд╛рдВрдЫрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЦреЛрдЬрдиреЗ рдпрд╛ рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред C # рднрд╛рд╖рд╛ рдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдкрдиреЗ рдЕрдиреБрдпрд╛рдпрд┐рдпреЛрдВ рдХреЛ
yield return
рдФрд░ yield break
рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ред рдЙрдирдХреЗ рдЖрд╡реЗрджрди рдиреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЖрдзрд╛рд░ рдмрдирд╛рдпрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдб рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХрд╛ рдЬрдиреНрдо рдХреИрд╕реЗ рд╣реБрдЖред рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реВрдВрдЧрд╛ред рдЖрдкрдХрд╛ рдмрд╣реБрдд рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдлреИрдХреНрдЯреНрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ
GetClone()
рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдХреЙрд▓ рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдкрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ
yield
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛
yield
ред рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрд┐рд╕реА рдХреЛ рднреА рдЦреЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░рдЦрд╛рдиреЗ рдЕрдкрдиреЗ рдкрд╛рдардХреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдореВрд▓
IEnumerable
рд╕реЗ рдЕрдЧрд▓реА рд╡рд╕реНрддреБ рдХрд╛ рдкрдарди рдХреЗрд╡рд▓ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рднреА рдкрд╛рдардХ рдкрд┐рдЫрд▓реА рд╡рд╕реНрддреБ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдардХ рдХреЛ рджреЛ рд╡реЗрдЯрд╣реИрдВрдбрд▓ рд╕реМрдВрдкреЗ рдЬрд╛рддреЗ рд╣реИрдВ - "рдореИрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ" рдФрд░ "рдореИрдВрдиреЗ рдкрдврд╝рд╛ рд╣реИ":
private IEnumerable<T> _input; private IEnumerator<T> _inputEnumerator; private Dictionary<string, AutoResetEvent> _imReadyToRead; private Dictionary<string, AutoResetEvent> _iVeReadMyValue; private WaitHandle[] _ivAlreadyReadArray; private T _nextObject; private bool _hasCurrent; private bool _hasNext; ... private void GetNext() { if (!_hasCurrent) return; foreach (var ready in _imReadyToRead) ready.Value.Set(); do { WaitHandle.WaitAll(_ivAlreadyReadArray);
рд░реАрдбрд┐рдВрдЧ рд╕реНрд╡рдпрдВ
IEnumerable
рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ (
GetCloneInstance
?)
GetCloneInstance
рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
private T GetCurrent(string subscriber) { T toReturn; _imReadyToRead[subscriber].WaitOne();
рддреЛ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдХреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рдереАред рд▓реЗрдХрд┐рди рдкреВрд░реНрд╡-рддреИрдпрд╛рд░реА рдХреЗ рджреМрд░рд╛рди,
WaitAll()
рд╡рд┐рдзрд┐ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛: рдпрд╣ рдПрдХ рд╕рдордп рдореЗрдВ 64 рд╕реЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ резрежреж+ рдкрд╛рдардХ рдЪрд╛рд╣рд┐рдП! рдХреИрд╕реЗ рд╣реЛ? рд╣рд╛рдВ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рд░рд▓ред рдФрд░ рдореИрдВрдиреЗ рдХреНрд▓реЛрди рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдкреНрд░рддреНрдпреЗрдХ 64 "рдИрдорд╛рдирджрд╛рд░" рдХреНрд▓реЛрди рдореЗрдВ рд╕реЗ, рдореИрдВ рд╢рд┐рдХрд╛рд░ рдХреЛ рдЪреБрдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреНрд▓реЛрди рдХрд░реВрдВрдЧрд╛ред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ 2, 3, 4 рдЖрджрд┐ рдореЗрдВ рдХреНрд▓реЛрди рдкреНрд░рдХрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдкреАрдврд╝реА! рдЬреИрд╕рд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдХрд╛рдлреА рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдЬреАрд╡ред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
private int _maxCloneOfOne = 64;
рдЕрдм рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдХрд┐рдирд╛рд░реЗ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ, рдзреНрдпрд╛рди рд╕реЗ рддреЗрд░рд╛-рдХреИрдЪ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдЖрд╡рд╢реНрдпрдХ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ, рддреЛ
google.code рдкрд░ рдкреГрд╖реНрда рдкрд░ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдЬреЛ рд▓реЛрдЧ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдФрд░ рдЦрд░рд╛рдм рдХрд░рдиреЗ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рднреА рджрд░рд╡рд╛рдЬреЛрдВ рдХреА рдЪрд╛рдмрд┐рдпрд╛рдВ рдорд┐рд▓реЗрдВрдЧреАред