рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

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

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

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



рдЖрдЗрдП рдРрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╕реНрдЯрдо рдЕрдкрд╡рд╛рдж рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕реЗ CustomException рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ рдирдореВрдирд╛рдХреНрд▓рд╛рд╕ , рдЬрд┐рд╕рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИред

//   ,  ,   class CustomException : Exception { } class SampleClass { //   , //     ,    public SampleClass() { throw new CustomException(); } } 


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

 //   ,    public static T CreateInstance<T>() where T : new() { return new T(); } //    class SampleClassSingleton { private static SampleClass _instance = new SampleClass(); static SampleClassSingleton() { } public static SampleClass Instance { get { return _instance; } } } 


рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ CreateInstance < SampleClass> () рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдпрд╛ SampleClassSingleton рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рдХреМрди рд╕реЗ рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред Instnace ?

 try { CreateInstance<SampleClass>(); //  var instance = SampleClassSingleton.Instance; } catch (CustomException e) { Console.WriteLine(e); } catch (Exception e) { Console.WriteLine(e); } 


рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рд░рд╣рд╕реНрдпреЛрджреНрдШрд╛рдЯрди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ "рдЕрдкреЗрдХреНрд╖рд┐рдд" рдХреИрдЪ рдмреНрд▓реЙрдХ (CustomException e) рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреИрдЪ (рдЕрдкрд╡рд╛рдж рдИ) рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ (рдЕрд░реНрдерд╛рдд, рдЬрдм рд╕рд╛рдорд╛рдиреНрдп CreateInstance рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП), рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд╕реАрдзреЗ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, Activator.CreateInstance рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдореВрд▓ рдЕрдкрд╡рд╛рдж рдХреЛ targetInvitException рдореЗрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкрдХрдбрд╝ (рдЕрдкрд╡рд╛рдж рдИ) рдмреНрд▓реЙрдХ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ TargetInvocationException рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рдмреНрд▓реЙрдХ рдХреЛ рдлрд┐рдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

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

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

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

 public static T CreateInstance<T>() where T : new() { try { return new T(); } catch (TargetInvocationException e) { //    ,    ,   ! throw e.InnerException; } } 


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

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

рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рджреЗрдЦреЗрдВ:

 Task<int> task = Task<int>.Factory.StartNew(() => { throw new CustomException(); }); try { int result = task.Result; } catch (CustomException e) { // ,      :( Console.WriteLine("CustomException caught: " + e); } catch (AggregateException e) { //      ! var inner = e.GetBaseException(); Console.WriteLine("Aggregate excpetion caught: " + inner); } 


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

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

 public static async void SimpleTask() { Task<int> task = Task<int>.Factory.StartNew(() => { throw new CustomException(); }); try { // await ┬л┬╗      //    ,   AggregateExcpetion! int result = await task; } catch (CustomException e) { //    ,       Console.WriteLine("CustomException caught: " + e); } } 


рдиреЛрдЯ
рдпрджрд┐ рдЖрдк C # 5.0 рднрд╛рд╖рд╛ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдЬреИрд╕реЗ рдХрд┐ Async рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рд▓реЗрдЦ рдХреА рдорджрдж рд╕реЗ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ: C # 5 рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди

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

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓рд┐рдП T ask < T > рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ GetResult рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдердб рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рд░рд┐рдЬрд▓реНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗ рдХрд╛рдлреА рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдЧреНрд░реАрдЧреЗрдЯрдПрдХреНрд╕рд┐рдЯреИрд╢рди рдХреЛ "рд╕реНрдЯреНрд░реЗрдЯ" рдХрд░реЗрдЧрд╛ рдФрд░ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдЦреЛрдП рдмрд┐рдирд╛ рдиреЗрд╕реНрдЯреЗрдб рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛ред

рдиреЛрдЯ
рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА .net Framework 4.5 рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп < T > рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЧреЗрдЯрд╡рд╛рдЯрд░ ()ред GetResult () , рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рджрдо рдкрд░ рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВред

ExceptionDispatchInfo рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдХреЗрд╡рд▓ рд╕реНрдереИрддрд┐рдХ рдХреИрдкреНрдЪрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝реЛ, рдФрд░ рдлрд┐рд░ рдереНрд░реЛ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рджреВрд╕рд░реА рдЬрдЧрд╣ (рдФрд░ рд╕рдВрднрд╡рддрдГ рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧреЗ рдореЗрдВ рднреА) рдлреЗрдВрдХ рджреЗрдВ ред

 static class TaskExtensions { public static T GetResult<T>(this Task<T> task) { try { T result = task.Result; return result; } catch (AggregateException e) { ExceptionDispatchInfo di = ExceptionDispatchInfo.Capture(e.InnerException); di.Throw(); return default(T); } } } 


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

 Task<int> task = Task<int>.Factory.StartNew(() => { throw new CustomException(); }); try { int result = task.GetResult(); } catch (CustomException e) { //     CustomException,   AggregateException Console.WriteLine("CustomException caught: " + e); } 


рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рдЖрдк рд╣рдорд╛рд░реА CreateInstance рдкрджреНрдзрддрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ TargetInfocationException рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧреА рдФрд░ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдЧреА:

 public static T CreateInstance<T>() where T : new() { try { var t = new T(); return t; } catch (TargetInvocationException e) { //     ExceptionDispatchInfo ExceptionDispatchInfo di = ExceptionDispatchInfo.Capture(e.InnerException); //        di.Throw(); //   ,  di.Throws()   ,  //        ,     //   return default(T); } } 


рдЕрдм, рдЬрдм рд╣рдо рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕реЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдордЭрджрд╛рд░ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рддрд╛ рд╣реИ:

ConsoleApplication1.CustomException: Exception of type 'ConsoleApplication1.CustomException' was thrown.<br>at ConsoleApplication1.SampleClass..ctor() in <br>c:\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 19<br> --- End of stack trace from previous location where exception was thrown ---<br> at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()<br>at ConsoleApplication1.Program.CreateInstance[T]() in c<br>\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:<br>line 50<br>at ConsoleApplication1.Program.Main(String[] args) in c:\ \Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 63


рдПрдХрд▓ рд╡рд░реНрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

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


All Articles