рдЕрдХреНрдХрд╛ рдзрд╛рд░рд╛рдПрдВ рдХреЗрд╡рд▓ рдирд╢реНрд╡рд░ рдХреЗ рд▓рд┐рдП

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

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


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

рдореЗрд░рд╛ рдирд╛рдо рд╡рд╛рдЧреАрдл рд╣реИ, рдореИрдВ рдиреЙрд░реНрд╡реЗ рдХреА рдХрдВрдкрдиреА рдорд╛рдЗрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рдЖрдЬ рд╣рдо рдЕрдХреНрдХрд╛ рд╕реНрдЯреНрд░реАрдореНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

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

рдЗрд╕ рд╕рд╛рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдпрджрд┐ рдЕрдХреНрдХрд╛ рдзрд╛рд░рд╛рдПрдВ рдПрд╕реНрдкрд┐рд░рд┐рди рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рджрд░реНрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓реЗ рдЬрд╛рдПрдЧрд╛?

рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рд╡рд╛рд╣ рдХрд╛рдлреА рд╕рд░рд▓, рд░реИрдЦрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


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

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



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

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

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

рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рд╕реЗ рд▓реЗрдХрд░ рдЕрдХреНрдХрд╛ рдзрд╛рд░рд╛рдПрдБ




рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдПрдХреНрдЯрд░реНрд╕ рд╕реЗ рд▓реЗрдХрд░ рдЕрдХреНрдХрд╛ рд╕реНрдЯреНрд░реАрдореНрд╕, рдореЗрд░рд╛ рддрд░реАрдХрд╛ рд╣реИред

рддрд╕реНрд╡реАрд░ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╣рдо рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдореИрдиреБрдЕрд▓ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдердХ рдЧрдП рдереЗ, рд╕рд╛рдЭрд╛ рд╕реНрдерд┐рддрд┐, рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд╣рд░ рдХреЛрдИ рдЬрд┐рд╕рдиреЗ рдорд▓реНрдЯреА-рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдмрдбрд╝реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЧрд▓рддреА рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЬреЛ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдШрд╛рддрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рдореЙрдбрд▓ рдХреА рдУрд░ рд▓реЗ рдЧрдпрд╛ред рд╣рдореЗрдВ рдХрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдк рдкрд░ рдкрдЫрддрд╛рд╡рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЬрдм рдЖрдк рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЙрддреНрд╕рд╛рд╣ рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдФрд░ рднреА рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
тАЬрдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЙрдирдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рдХреЛрдб рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдореИрдВ рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ A рдмрдирд╛рддрд╛ рд╣реВрдВ рдЬреЛ рдЕрднрд┐рдиреЗрддрд╛ B рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ C рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ тАЭ
рдиреЛрдПрд▓ рд╡реЗрд▓реНрдЪ (рдЕрдВрдбрд░рд╕реНрдХреЛрд░ .io)
рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдиреЗ рд░рдЪрдирд╛ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд▓реЛрдЪрдирд╛ рдХреАред рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдкрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдиреЛрд▓реНрд╕ рд╡реЗрд▓реНрдЪ рдереЗ, рдЬреЛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдереЗред рдЙрдиреНрд╣реЛрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:



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



рдЬрдм рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдм рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрднрд┐рдиреЗрддрд╛ред рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд╛рд▓ рдХреЗ рдмрд┐рдирд╛, рдРрд╕реА рдХрдареЛрд░ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред
рдЕрдХреНрдХрд╛ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ, рд░реЛрд▓реИрдВрдб рдХреБрд╣реНрди рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдЦрд░рд╛рдм рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдЕрднрд┐рдиреЗрддрд╛ рд╡рд┐рдзрд┐ рдмрддрд╛рдИ рдЧрдИ рд╡рд┐рдзрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрджреЗрд╢: рдпрд╣ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ (рдпрд╛ рдЗрдХрд╛рдИ, рднрд╛рд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рддреЛ рдЖрдкрдиреЗ рдмрддрд╛ рджрд┐рдпрд╛, рдлрд┐рд░ рдХреНрдпрд╛? рдмрдВрдж рдХрд░реЛред рд╣рдо рд╢реВрдиреНрдп рд╣реЛ рдЧрдПред рдЖрдк рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, LINQ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЬрд╣рд╛рдБ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ IQueryable, IEnumerable рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдм рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрднрд┐рдиреЗрддрд╛ рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рджреЗрддреЗред рдЗрд╕реА рд╕рдордп, рд░реЛрд▓рд╛рдВрдб рдХреБрд╣реНрди рдиреЗ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдкрддреНрддрд┐ рдЬрддрд╛рдИ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд░рдЪрдирд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВ, рдЙрд╕реА рдЕрд░реНрде рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рдорд╛рдирд╡ рд╕рдорд╛рдЬ рдЦреБрдж рдХреЛ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЙрдзрд╛рд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рджрд╛рд░реНрд╢рдирд┐рдХ рддрд░реНрдХ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рджреГрд╢реНрдп рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рд╣рд╛рдБ, рдЕрднрд┐рдиреЗрддрд╛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рднреА рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕рд╛рде рд╣рдо рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛рдиреА рд╣рдо рдЬрдЯрд┐рд▓ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рдРрд╕реА рдЖрд▓реЛрдЪрдирд╛ рдореМрдЬреВрдж рд╣реИред

public class SampleActor : ReceiveActor { public SampleActor() { Idle(); } protected override void PreStart() { /* ... */ } private void Idle() { Receive<Job>(job => /* ... */); } private void Working() { Receive<Cancel>(job => /* ... */); } } 

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

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

 var results = db.Companies .Join(db.People, c => c.CompanyID, p => p.PersonID, (c, p) => new { c, p }) .Where(z => zcCreated >= fromDate) .OrderByDescending(z => zcCreated) .Select(z => zp) .ToList(); 

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

 HttpGet pageUrl |> fun s -> Regex.Replace(s, "[^A-Za-z']", " ") |> fun s -> Regex.Split(s, " +") |> Set.ofArray |> Set.filter (fun word -> not (Spellcheck word)) |> Set.iter (fun word -> printfn " %s" word) 

(рд╕реНрд░реЛрдд)

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

 val in = Source(1 to 10) val out = Sink.ignore val bcast = builder.add(Broadcast[Int](2)) val merge = builder.add(Merge[Int](2)) val f1,f2,f3,f4 = Flow[Int].map(_ + 10) source ~> f1 ~> bcast ~> f2 ~> merge ~> f3 ~> sink bcast ~> f4 ~> merge ~> 

(рд╕реНрд░реЛрдд)

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

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

 var runnable = Source .From(Enumerable.Range(1, 1000)) .Via(Flow.Create<int>().Select(x => x * 2) .To(Sink.ForEach<int>(x => Console.Write(x.ToString)); 

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

 var graph = GraphDsl.Create(builder => { var bcast = builder.Add(new Broadcast<int>(2)); var merge = builder.Add(new Merge<int, int>(2)); var count = Flow.FromFunction(new Func<int, int>(x => 1)); var sum = Flow.Create<int>().Sum((x, y) => x + y); builder.From(bcast.Out(0)).To(merge.In(0)); builder.From(bcast.Out(1)).Via(count).Via(sum).To(merge.In(1)); return new FlowShape<int, int>(bcast.In, merge.Out); }); 

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдУрдВ рд╕реЗ рдЕрдХреНрдХрд╛ рдзрд╛рд░рд╛рдУрдВ рддрдХ


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

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд░реНрдЬрдХ рдХреА рд╕реВрдЪреА рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ: рдпрд╣рд╛рдВ рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рдФрд░ рдУрд░реЗрдХрд▓ рдФрд░ рдЯреНрд╡рд┐рдЯрд░ рд╣реИрдВред

рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдУрдВ рдПрдкреАрдЖрдИ рдХреЗ рдореБрдЦреНрдп рдШрдЯрдХ:

  1. рдкреНрд░рдХрд╛рд╢рдХ
  2. рдЧреНрд░рд╛рд╣рдХ
  3. рдЕрдВрд╢рджрд╛рди
  4. рдкреНрд░реЛрд╕реЗрд╕рд░

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдЗрд╕ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЕрд░реНрде рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдЕрдХреНрдХрд╛ рд╕реНрдЯреНрд░реАрдо рдЗрд╕ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

 public interface IPublisher<out T> { void Subscribe(ISubscriber<T> subscriber); } public interface ISubscriber<in T> { void OnSubscribe(ISubscription subscription); void OnNext(T element); void OnError(Exception cause); void OnComplete(); } 

рдЗрдВрдЯрд░рдлреЗрд╕, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХрд╛рд╢рдХ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ - "рд╕рджрд╕реНрдпрддрд╛"ред рд╕рдмрд╕реНрдХреНрд░рд╛рдЗрдмрд░, рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░, рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред

 public interface ISubscription { void Request(long n); void Cancel(); } public interface IProcessor<in T1, out T2> : ISubscriber<T1>, IPublisher<T2> { } 

рдЕрдВрдд рдореЗрдВ, рд╕рджрд╕реНрдпрддрд╛ рдореЗрдВ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ - "рдкреНрд░рд╛рд░рдВрдн" рдФрд░ "рдордирд╛"ред рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд┐рд╕реА рднреА рдирдП рддрд░реАрдХреЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд╢рдХ рдФрд░ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред

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

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


(рд╕реНрд░реЛрдд (Apache Flink))

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

рдЕрдХреНрдХрд╛ рдзрд╛рд░рд╛рдПрдБ рд╕рд┐рджреНрдзрд╛рдВрдд


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

  1. рдбреЗрдЯрд╛ рдХрд╛ рд╕реНрд░реЛрдд (рд╕реНрд░реЛрдд) - рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЪрд░рдгред
  2. рд╕рд┐рдВрдХ рдПрдХ рд╕рд┐рдВрдЧрд▓-рдПрдВрдЯреНрд░реА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реНрдЯреЗрдк рд╣реИред
  3. рдЪреЗрдХрдкреЙрдЗрдВрдЯ (рдкреНрд░рд╡рд╛рд╣) - рдПрдХ рдЗрдирдкреБрдЯ рдФрд░ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЪрд░рдгред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╣рд╛рдВ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╕реНрдореГрддрд┐ рдореЗрдВ: рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдХреЙрд▓, рд╕рдорд╛рдирддрд╛ рдХреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП, рдмрд╣реБ-рдереНрд░реЗрдбреЗрдбред

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



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



рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд╛рд▓рд┐рдпрд╛рдБ рд╣реИрдВ: рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ LINQ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдорд┐рд▓рддреЗ рдЬреБрд▓рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, First, Last, FirstOrDefaultред рдмреЗрд╢рдХ, рдЬреЛ рдХреБрдЫ рднреА рдЖрдкрдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ, рдЖрдк рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ, рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ, рдЕрдХреНрдХрд╛ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ .NET рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдбрдВрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреЛрдИ рднреА рдЕрднрд┐рдиреЗрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЗрдирдкреБрдЯ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЕрдкрдиреЗ рддреИрдпрд╛рд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЗрд╕реЗ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдФрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдЪреМрдХрд┐рдпрд╛рдБ рд╣реИрдВ, рдЬреЛ, рд╢рд╛рдпрдж, LINQ рдХреА рдФрд░ рднреА рдЕрдзрд┐рдХ рдпрд╛рдж рджрд┐рд▓рд╛рддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдБ Select, рдФрд░ SelectMany, рдФрд░ GroupBy рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо LINQ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

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

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

 var results = db.Companies .Join(db.People, c => c.CompanyID, p => p.PersonID, (c, p) => new { c, p }) .Where(z => zcCreated >= fromDate) .OrderByDescending(z => zcCreated) .Select(z => zp) .ToList(); 

рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ LINQ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдВрддрд┐рдо рдЯреЙрд▓рд┐рд╕реНрдЯ рдПрд▓рд┐рдореЗрдВрдЯ рдХреА рддреБрд▓рдирд╛ рд╕реНрдЯреНрд░реАрдо рд╕реНрдЯреНрд░реАрдо рдордЯреАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЕрдЧрд░ рд╣рдо ToList рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрдирдореИрдореЗрдЯрд╛рдЗрдЬреНрдб LINQ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдбреЗрдЯрд╛ SQL рд╕рд░реНрд╡рд░ рдпрд╛ Oracle рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ LINQ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░реНрд╕ рддрдерд╛рдХрдерд┐рдд рдбрд┐рдлрд░реЗрдВрдЯ рдХреНрд╡реЗрд░реА рдПрдХреНрдЬреАрдХреНрдпреВрд╢рди (рджреЗрд░реА рд╕реЗ рдХреНрд╡реЗрд░реА рдПрдХреНрдЬреАрдХреНрдпреВрд╢рди), t рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рдиреА, рдЕрдиреБрд░реЛрдз рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреБрд░реЛрдз рдХреЗ рдЖрдзрд╛рд░ рдкрд░ - рдПрдХ рд╕реВрдЪреА рдпрд╛ рдкрд╣рд▓рд╛ рдкрд░рд┐рдгрд╛рдо - рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдЯреАрдо рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рдЬрдм рд╣рдо ToList рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо LINQ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рд╣рдореЗрдВ рддреИрдпрд╛рд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред

 var runnable = Source .From(Enumerable.Range(1, 1000)) .Via(Flow.Create<int>().Select(x => x * 2) .To(Sink.ForEach<int>(x => Console.Write(x.ToString)); 

рдЕрдХреНрдХрд╛ рдзрд╛рд░рд╛рдПрдБ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред рддрд╕реНрд╡реАрд░ рдореЗрдВ рд╣рдорд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЧреНрд░рд╛рдл рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЪреМрдХрд┐рдпреЛрдВ рдФрд░ рдЕрдкрд╡рд╛рд╣ рдХрд╛ рд╕реНрд░реЛрдд рд╣реИ, рдФрд░ рд╣рдо рдЕрдм рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

 var runnable = Source .From(Enumerable.Range(1, 1000)) .Via(Flow.Create<int>().Select(x => x * 2) .To(Sink.ForEach<int>(x => Console.Write(x.ToString)); var system = ActorSystem.Create("MyActorSystem"); using (var materializer = ActorMaterializer.Create(system)) { await runnable.Run(materializer); } 

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

рдкреНрд░рд╡рд╛рд╣ рдХреЗ рднреМрддрд┐рдХрдХрд░рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдХреНрдХрд╛ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рднреМрддрд┐рдХ рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рднреМрддрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

 var output = new List<int>(); var source1 = Source.From(Enumerable.Range(1, 1000)); var sink1 = Sink.ForEach<int>(output.Add); IRunnableGraph<NotUsed> runnable1 = source1.To(sink1); var source2 = Source.From(Enumerable.Range(1, 1000)); var sink2 = Sink.Sum<int>((x,y) => x + y); IRunnableGraph<Task<int>> runnable2 = source2.ToMaterialized(sink2, Keep.Right); 

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

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

  • Source.FromEnumerator рдФрд░ Source.From рдЖрдкрдХреЛ IEnumerable рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╕реНрд░реЛрдд рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
  • рдЕрдирдлреЛрд▓реНрдбреЗрдб рдФрд░ рдЕрдирдлреЛрд▓реНрдбреЗрдиреНрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдЧрдгрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдмрд╢рд░реНрддреЗ рдХрд┐ рдпрд╣ рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  • FromInputStream рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ;
  • FromFile рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ;
  • ActorPublisher рдЕрднрд┐рдиреЗрддрд╛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдзрд░реНрдорд╛рдиреНрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

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



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



рдЕрд▓реНрдкрд╛рдХрд╛ .NET рдХрдиреЗрдХреНрдЯрд░ рдХреА рд╕реВрдЪреА рдЕрдзрд┐рдХ рд╡рд┐рдирдореНрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рднрд░рдирд╛ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдПрдХ рддрддреНрд╡ рд╣реИред рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╕реЗ рдбреЗрд╡рд┐рдб рдлрд╛рдЙрд▓рд░ рдХрд╛ рдПрдХ рдЖрдзреЗ рд╕рд╛рд▓ рдкреБрд░рд╛рдирд╛ рдЯреНрд╡реАрдЯ рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рд╕рд┐рдЧреНрдирд▓рдЖрд░ рдЕрдм рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдХреНрдХрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдХреНрдХрд╛ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рдерд╛ред рдЕрдХреНрдХрд╛ Microsoft Azure рдХреА рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред CSV рд╣рд╛рд░реВрди рд╕реНрдЯреИрдирд╛рд░реНрдб рдХреА рд╣рддрд╛рд╢рд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдЬрдм рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ CSV рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдЪреНрдЫреА рдзрд╛рд░рд╛ рдирд╣реАрдВ рд╣реИ: рдЕрдм CSV XML рдХреЗ рд▓рд┐рдП рдЕрдХреНрдХрд╛ рдХреА рдЕрдкрдиреА рдПрдХ рдзрд╛рд░рд╛ рд╣реИред AMQP рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, RabbitMQ), рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХрд╛рдлреНрдХрд╛ рднреА рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИред рдЗрд╕ рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ред

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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрджрд╛рд╣рд░рдг: рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧ рд╕реНрдЯреНрд░реАрдо


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



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

 CREATE TABLE EventJournal ( Ordering BIGINT IDENTITY(1,1) PRIMARY KEY NOT NULL, PersistenceID NVARCHAR(255) NOT NULL, SequenceNr BIGINT NOT NULL, Timestamp BIGINT NOT NULL, IsDeleted BIT NOT NULL, Manifest NVARCHAR(500) NOT NULL, Payload VARBINARY(MAX) NOT NULL, Tags NVARCHAR(100) NULL CONSTRAINT QU_EventJournal UNIQUE (PersistenceID, SequenceNr) ) 

рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдУрд░, SQL рд╕рд░реНрд╡рд░ рд╕реЗ рд▓рд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдЗрд╡реЗрдВрдЯрд╕реНрдЯреЛрд░ рдореЗрдВ рдирд┐рд░рдВрддрд░ рдХрд▓рд╛рдХрд╛рд░ рдЕрдХреНрдХрд╛, EventJournal рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЪрд┐рддреНрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдирд╛-рд╕реНрдерд▓ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред



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



рдпрд╣ рд╕рд┐рд░реНрдл рдЙрдиреНрд╣реЗрдВ рд╕реНрд░реЛрдд рд╕реЗ рдКрдкрд░ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рд╡реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЖрддреЗ рд╣реИрдВ рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреНрд╡реЗрд░реА (рджреГрдврд╝рддрд╛ рдкреНрд░рд╢реНрди):

  • AllPersistencelds
  • CurrentPersistencelds
  • EventsByPersistenceld
  • CurrentEventsByPersistenceld
  • EventsByTag
  • CurrentEventsByTag

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

 let system = mailbox.Context.System let queries = PersistenceQuery.Get(system) .ReadJournalFor<SqlReadJournal>(SqlReadJournal.Identifier) let mat = ActorMaterializer.Create(system) let offset = getCurrentOffset client config let ks = KillSwitches.Shared "persistence-elastic" let task = queries.EventsByTag(PersistenceUtils.anyEventTag, offset) .Select(fun e -> ElasticTypes.EventEnvelope.FromAkka e) .GroupedWithin(config.BatchSize, config.BatchTimeout) .Via(ks.Flow()) .RunForeach((fun batch -> processItems client batch), mat) .ContinueWith(handleStreamError mailbox, TaskContinuationOptions.OnlyOnFaulted) |> Async.AwaitTaskVoid 

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

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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрджрд╛рд╣рд░рдг: рдЬреЗрдЯ рдЯреНрд╡реАрдЯреНрд╕


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



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

рдпрд╣ рд╕рдм рдореЗрд░реЗ GitHub рдЦрд╛рддреЗ рдореЗрдВ, AkkaStreamsDemo рдореЗрдВ рд╣реИ ред рдЦреЛрд▓реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ (рдпрд╛ рдЖрдк рдЕрднреА рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ )ред

рдЪрд▓реЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ Twitter рд╕реЗ рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: Program.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ

 var useCachedTweets = false 

рдпрджрд┐ рдореБрдЭреЗ рдЯреНрд╡рд┐рдЯрд░ рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдЯреНрд╡реАрдЯ рдХреЛ рдХреИрд╢ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд╡реЗ рддреЗрдЬ рд╣реИрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдЫ RunnableGraph рдмрдирд╛рддреЗ рд╣реИрдВред

 public static IRunnableGraph<IActorRef> CreateRunnableGraph() { var tweetSource = Source.ActorRef<ITweet>(100, OverflowStrategy.DropHead); var formatFlow = Flow.Create<ITweet>().Select(Utils.FormatTweet); var writeSink = Sink.ForEach<string>(Console.WriteLine); return tweetSource.Via(formatFlow).To(writeSink); } 

( рд╕реНрд░реЛрдд )

рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдЯреНрд╡реАрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реНрд░реЛрдд рд╣реИ, рдЬреЛ рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ рд╕реЗ рдЖрддрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрди рдЯреНрд╡реАрдЯреНрд╕ рдХреЛ рд╡рд╣рд╛рдВ рдХреИрд╕реЗ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░реЗрдВ (рдЯреНрд╡реАрдЯ рдкреНрд░рд╛рд░реВрдк рдХреЗрд╡рд▓ рд▓реЗрдЦрдХ рдХреЛ рдПрдХ рдЯреНрд╡реАрдЯ рджреЗрддрд╛ рд╣реИ) рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рд▓рд┐рдЦреЗрдВред

StartTweetStream - рдпрд╣рд╛рдБ рд╣рдо Tweetinvi рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

 public static void StartTweetStream(IActorRef actor) { var stream = Stream.CreateSampleStream(); stream.TweetReceived += (_, arg) => { arg.Tweet.Text = arg.Tweet.Text.Replace("\r", " ").Replace("\n", " "); var json = JsonConvert.SerializeObject(arg.Tweet); File.AppendAllText("tweets.txt", $"{json}\r\n"); actor.Tell(arg.Tweet); }; stream.StartStream(); } 

( рд╕реНрд░реЛрдд )

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

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

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

TweetsWithBroadcast:

 var graph = GraphDsl.Create(b => { var broadcast = b.Add(new Broadcast<ITweet>(2)); var merge = b.Add(new Merge<string>(2)); b.From(broadcast.Out(0)) .Via(Flow.Create<ITweet>().Select(tweet => tweet.CreatedBy)) .Via(formatUser) .To(merge.In(0)); b.From(broadcast.Out(1)) .Via(Flow.Create<ITweet>().Select(tweet => tweet.Coordinates)) .Via(formatCoordinates) .To(merge.In(1)); return new FlowShape<ITweet, string>(broadcast.In, merge.Out); }); 

( рд╕реНрд░реЛрдд )

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

рд╣рдорд╛рд░реЗ рдбреЗрдореЛ рдореЗрдВ рдЕрдЧрд▓рд╛ рдХрджрдо рдЪреАрдЬреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рдирд╛ рд╣реИред рдЪрд▓рд┐рдП рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреЛ рдмрджрд▓рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

 var graph = GraphDsl.Create(b => { var broadcast = b.Add(new Broadcast<ITweet>(2)); var merge = b.Add(new Merge<string>(2)); b.From(broadcast.Out(0)) .Via(Flow.Create<ITweet>().Select(tweet => tweet.CreatedBy) .Throttle(10, TimeSpan.FromSeconds(1), 1, ThrottleMode.Shaping)) .Via(formatUser) .To(merge.In(0)); b.From(broadcast.Out(1)) .Via(Flow.Create<ITweet>().Select(tweet => tweet.Coordinates) .Buffer(10, OverflowStrategy.DropNew) .Throttle(1, TimeSpan.FromSeconds(1), 10, ThrottleMode.Shaping)) .Via(formatCoordinates) .To(merge.In(1)); return new FlowShape<ITweet, string>(broadcast.In, merge.Out); });} 

( рд╕реНрд░реЛрдд )

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

 var graph = GraphDsl.Create(b => { var broadcast = b.Add(new Broadcast<ITweet>(2)); var merge = b.Add(new Merge<string>(2)); b.From(broadcast.Out(0)) .Via(Flow.Create<ITweet>().Select(tweet => tweet.CreatedBy) .Throttle(10, TimeSpan.FromSeconds(1), 1, ThrottleMode.Shaping)) .Via(formatUser) .To(merge.In(0)); b.From(broadcast.Out(1)) .Via(Flow.Create<ITweet>().Select(tweet => tweet.Coordinates) .Buffer(10, OverflowStrategy.DropNew) .Throttle(1, TimeSpan.FromSeconds(1), 10, ThrottleMode.Shaping)) .Via(Flow.Create<ICoordinates>().SelectAsync(5, Utils.GetWeatherAsync)) .Via(formatTemperature) .To(merge.In(1)); return new FlowShape<ITweet, string>(broadcast.In, merge.Out); }); 

( рд╕реНрд░реЛрдд )

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

 public static async Task<decimal> GetWeatherAsync(ICoordinates coordinates) { var httpClient = new HttpClient(); var requestUrl = $"http://api.met.no/weatherapi/locationforecast/1.9/?lat={coordinates.Latitude};lon={coordinates.Latitude}"; var result = await httpClient.GetStringAsync(requestUrl); var doc = XDocument.Parse(result); var temp = doc.Root.Descendants("temperature").First().Attribute("value").Value; return decimal.Parse(temp); } 

( рд╕реНрд░реЛрдд ) рдпрд╣рд╛рдВ

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

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

рдпрд╣ рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ рдХрд┐ рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╛рдирддрд╛ рдХреЗ рд╕реНрддрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпреЗ рдХреЗрд╡рд▓ рдХреБрдЫ рд╣реА рдмреНрд▓реЙрдХ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрдХрд╛ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВред рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рд╡реЗ рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реИрдВред

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

рдЕрдВрддрд┐рдо рд╡рд┐рдЪрд╛рд░




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

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

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


This is the Akka Stream.

This is the Source that feeds the Akka Stream.

This is the MapAsync that maps from the Source that feeds the Akka Stream.

This is the Broadcast that forks the MapAsync that maps from the Source that feeds the Akka Stream.

This is the Merge that collects from the Broadcast that forks the MapAsync that maps from the Source that feeds the Akka Stream.

This is the FilterNot that selects from the Merge that collects from the Broadcast that forks the MapAsync that maps from the Source that feeds the Akka Streams.

This is the Balance that splits the FilterNot that selects from the Merge that collects from the Broadcast that forks the MapAsync that maps from the Source that feeds the Akka Stream.

This is the Zip that combines from the Balance that splits the FilterNot that selects from the Merge that collects from the Broadcast that forks the MapAsync that maps from the Source that feeds the Akka Stream.

This is the Drop that removes from the Zip that combines from the Balance that splits the FilterNot that selects from the Merge that collects from the Broadcast that forks the MapAsync that maps from the Source that feeds the Akka Stream.

This is TakeWhile that pulls from the Drop that removes from the Zip that combines from the Balance that splits the FilterNot that selects from the Merge that collects from the Broadcast that forks the MapAsync that maps from the Source that feeds the Akka Stream.

This is the Throttle that speeds down the TakeWhile that pulls from the Drop that removes from the Zip that combines from the Balance that splits the FilterNot that selects from the Merge that collects from the Broadcast that forks the MapAsync that maps from the Source that feeds the Akka Stream.

This is the Bidiflow that turns back the Throttle that speeds down the TakeWhile that pulls from the Drop that removes from the Zip that combines from the Balance that splits the FilterNot that selects from the Merge that collects from the Broadcast that forks the MapAsync that maps from the source that feeds the Akka Streams.

рдпрд╣ рд╡рд╣ рд╕рд┐рдВрдХ рд╣реИ рдЬреЛ рдмрд┐рдбрд┐рдлреНрд▓реЛ рд╕реЗ рднрд░рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдереНрд░реЙрдЯрд▓ рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЯреЗрдХрд╣рд╛рдЗрд▓ рдХреЛ рдЧрддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдбреНрд░реЙрдк рд╕реЗ тАЛтАЛрдирд┐рдХрд▓рдиреЗ рд╡рд╛рд▓реА рдЬрд╝рд┐рдк рд╕реЗ рдЦреАрдВрдЪрддрд╛ рд╣реИ рдЬреЛ рд╢реЗрд╖ рд░рд╛рд╢рд┐ рд╕реЗ рдЬреЛрдбрд╝рддреА рд╣реИ рдЬреЛ рдлрд╝рд┐рд▓реНрдЯрд░рдиреЛрдЯ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдорд░реНрдЬ рд╕реЗ рдЪреБрдирддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рд╕рд╛рд░рдг рд╕реЗ рдЗрдХрдЯреНрдард╛ рд╣реЛрддрд╛ рд╣реИ MapAsync рдХреЗ рд▓рд┐рдП рдХрд╛рдВрдЯрд╛ рд╕реНрд░реЛрдд рд╕реЗ рдирдХреНрд╢реЗ рдХрд┐ рдЕрдХреНрдХрд╛ рд╕реНрдЯреНрд░реАрдо рдЦрд┐рд▓рд╛рддреА рд╣реИред
рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХрд╛ рдорд┐рдирдЯред рдпрджрд┐ рдЖрдкрдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдкрд╕рдВрдж рдЖрдИ рдФрд░ рд╡рд╣ рдХреБрдЫ рдФрд░ рдкрд╕рдВрдж рдХрд░реЗрдЧрд╛, рддреЛ рдЕрдЧрд▓реЗ DotNext 2018 рдорд╛рд╕реНрдХреЛ 22-23 рдирд╡рдВрдмрд░ рдХреЛ рдорд╛рд╕реНрдХреЛ рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ , рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬреБрд▓рд╛рдИ рдХреА рдХреАрдордд рдкрд░ рдЯрд┐рдХрдЯ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдХрд░реЗрдВ (1 рдЕрдЧрд╕реНрдд рд╕реЗ, рдЯрд┐рдХрдЯреЛрдВ рдХреА рд▓рд╛рдЧрдд рдмрдврд╝ рдЬрд╛рдПрдЧреА)ред

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


All Articles