рдбрд┐рд╕реНрдкреИрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рд╕реЗ рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛

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

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рдХрд▓реНрдк


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

ConcurrentQueue<Action> _actions; 


рдЙрд╕реА рд╕рдордп, рдЧреНрд░рд╛рд╣рдХ рд╕реВрддреНрд░ рдЗрд╕рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рддрддреНрд╡ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

 _actions.Enqueue(() => { < > }); 


рдФрд░ рд▓рдХреНрд╖реНрдп рдзрд╛рдЧрд╛ рдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рдХреНрд░рдо рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ:

 Action action; if (_actions.TryDequeue()) { action(); } 


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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


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

 internal static class ExternalInterface { public static void Method1() { throw new NotImplementedException(); } public static int Method2() { throw new NotImplementedException(); } public static int Method3() { throw new NotImplementedException(); } private static void ExternalMethod1() { //    Thread.Sleep(1000); } private static int ExternalMethod2() { //    Thread.Sleep(1000); return 1; } private static void ExternalMethod3() { //    Thread.Sleep(1000); } } 


рдЬрд╣рд╛рдБ ExternalMethod1, ExternalMethod2, рдФрд░ ExternalMethod3 рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЖрдпрд╛рддрд┐рдд рддрд░реАрдХреЗ рд╣реИрдВ, рдФрд░ Method1, Method2, рдФрд░ Method3 рд╡рд░реНрдЧ рдХреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░реНрдп рдПрдХ рд╣реА рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдпрд╛рддрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИред
рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд▓рд╛рд╕ рднреА рд╣реИ (рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд▓рд╛рд╕), рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рд╕реЗ рдПрдХреНрд╕рдЯрд░реНрдирд▓ рдЗрдВрдЯреНрд░реЛрдбрдХреНрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 class Program { static void ThreadMethod1() { ExternalInterface.Method1(); } static void ThreadMethod2() { ExternalInterface.Method2(); } static void ThreadMethod3() { ExternalInterface.Method3(); } static void Main(string[] args){ } } 


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

 //     private static Thread _dispatchingThread; // Dispatcher      private static Dispatcher _dispatchObject; public static void Open() { //     _dispatchingThread = new Thread(DispatchingThreadMethod); _dispatchingThread.Start(); } private static void DispatchingThreadMethod() { Console.WriteLine(Thread.CurrentThread.ManagedThreadId); //  ,    // ... //  Dispatcher'  _dispatchObject = Dispatcher.CurrentDispatcher; //      Dispatcher.Run(); //  ,    // ... } 


рдЕрдЧрд▓рд╛, рд╣рдо рд▓рдХреНрд╖реНрдп рддрддреНрд╡ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рддрддреНрд╡ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ:

 private void Dispatch(Action action) { if (_dispatchObject != null) { _dispatchObject.Invoke(action); } } 


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

 private void Dispatch(Action action) { if (_dispatchObject != null) { lock (_dispatchObject) { _dispatchObject.Invoke(action); } } } 


рдЕрдм рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

 public static void Method1() { Dispatch(() => ExternalMethod1()); } public static int Method2() { int result = 0; Dispatch(() => { result = ExternalMethod2(); }); return result; } public static void Method3() { Dispatch(() => ExternalMethod3()); } 


The_dispatchingThread рдереНрд░реЗрдб рдХреЗ рд╕рд╣реА рд╕рдорд╛рдкрди рдХреЗ рд▓рд┐рдП, рдмрд╛рд╣рд░реА рд╡рд┐рдзрд┐ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:

 public static void Close() { _dispatchObject.InvokeShutdown(); } 


рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╣реА рдереНрд░реЗрдб рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

 static void Main(string[] args) { ExternalInterface.Open(); //       Dispatcher //     Thread.Sleep(1000); new Thread(ThreadMethod1).Start(); new Thread(ThreadMethod2).Start(); new Thread(ThreadMethod3).Start(); Console.ReadKey(); ExternalInterface.Close(); } 


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

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

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


All Articles