Autofixture: рд╡реИрдХрд▓реНрдкрд┐рдХ GuardClauseAssertion рдмрдирд╛рдПрдБ рдЬреЛ `async` рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдорд╛рд░реНрдЪ 2019  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: AutoFixture/AutoFixture

рдЬреИрд╕рд╛ рдХрд┐ #268 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, GuardClauseAssertion рд╡рд░реНрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЧреИрд░- рд╡рд┐рдлрд▓ рддреЗрдЬрд╝ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

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

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@ploeh рдореВрд▓ рд░реВрдк рд╕реЗ, _any_ async рд╡рд┐рдзрд┐ рд╡рд┐рдлрд▓-рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

```рд╕реА#
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ async рдХрд╛рд░реНрдпрдЧрд╛рд░реНрдбреЗрдбOpenGenericMethodReturningTaskResult(рд╡рд╕реНрддреБ рддрд░реНрдХ)
{
рдЕрдЧрд░ (рддрд░реНрдХ == рд╢реВрдиреНрдп) рдирдпрд╛ ArgumentNullException (nameof (рддрд░реНрдХ)) рдлреЗрдВрдХ рджреЗрдВ;

await Task.Yield();

return default;

}
```

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ null рдХрд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдлреЗрдВрдХрддреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рдлрд▓ Task рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, GuardClauseAssertion рдЗрд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧреБрдо рдЧрд╛рд░реНрдб рдХреНрд▓реЙрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИред

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

рдмреЗрд╢рдХ, рдЖрдк рдЗрд╕реЗ рддреБрд░рдВрдд рд╡рд┐рдлрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ ( async рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдирд┐рдЬреА рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ), рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред

рд╕рднреА 12 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

async рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рджреМрд░рд╛рди _fail fast_ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд▓рдЧрддрд╛ рд╣реИред

рдРрд╕рд╛ рдХреИрд╕реЗ? рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@ploeh рдореВрд▓ рд░реВрдк рд╕реЗ, _any_ async рд╡рд┐рдзрд┐ рд╡рд┐рдлрд▓-рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

```рд╕реА#
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ async рдХрд╛рд░реНрдпрдЧрд╛рд░реНрдбреЗрдбOpenGenericMethodReturningTaskResult(рд╡рд╕реНрддреБ рддрд░реНрдХ)
{
рдЕрдЧрд░ (рддрд░реНрдХ == рд╢реВрдиреНрдп) рдирдпрд╛ ArgumentNullException (nameof (рддрд░реНрдХ)) рдлреЗрдВрдХ рджреЗрдВ;

await Task.Yield();

return default;

}
```

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ null рдХрд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдлреЗрдВрдХрддреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рдлрд▓ Task рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, GuardClauseAssertion рдЗрд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧреБрдо рдЧрд╛рд░реНрдб рдХреНрд▓реЙрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИред

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

рдмреЗрд╢рдХ, рдЖрдк рдЗрд╕реЗ рддреБрд░рдВрдд рд╡рд┐рдлрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ ( async рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдирд┐рдЬреА рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ), рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рдХреЛрдб async , рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЖрдордВрддреНрд░рдг awaited рдФрд░ рдЕрдкрд╡рд╛рдж рддреБрд░рдВрдд рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рдмрд┐рдВрджреБ рд╣реИ; рдореИрдВ рдЙрд╕ рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред

рдореИрдВ рдХрднреА-рдХрднреА рднрдЯрдХ рдЬрд╛рддрд╛ рд╣реВрдВ рдЬрдм рдХреЛрдИ рдпрд╣ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдмрддрд╛рддрд╛ рд╣реИ (рдереЛрдбрд╝реЗ рд╕рдмреВрдд рдХреЗ рд╕рд╛рде) рдХрд┐ рдХреБрдЫ _impossible_...

рдореИрдВ рдХрднреА-рдХрднреА рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реВрдВ рдЬрдм рдХреЛрдИ рдпрд╣ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рддрд╛рддреНрдкрд░реНрдп рдХрд░рддрд╛ рд╣реИ (рдереЛрдбрд╝реЗ рд╕рдмреВрдд рдХреЗ рд╕рд╛рде) рдХрд┐ рдХреБрдЫ рдЕрд╕рдВрднрд╡ рд╣реИ ...

рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИ

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

рдЕрдм рдореИрдВ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдмреВрд▓рд┐рдпрди рдзреНрд╡рдЬ рди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП GuardClauseAssertion рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

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

рдпрд╣рд╛рдВ рд╡рд╣ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

  1. рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ async рдХреАрд╡рд░реНрдб рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
  2. async рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдиреЗрд╕реНрдЯреЗрдб рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ
  3. рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд╣рд░реА рднрд╛рдЧ рдореЗрдВ рдЧрд╛рд░реНрдб рдХреНрд▓реЙрдЬ рд▓рдЧрд╛рдПрдВ
  4. рдиреЗрд╕реНрдЯреЗрдб рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдВ

рдЙрджрд╛рд╣рд░рдг:

public Task<int> GetNumberAsync(MyObject obj)
{
    // Fail-fast behavior
    if (request is null)
        throw new ArgumentNullException(nameof(obj));

    async Task<int> work()
    {
        var items = await obj.GetItemsAsync(); // whatever you need to call
        return items.Count();
    }

    return work();
}

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд░рд╣рд╛ рд╣реИред рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@mniak рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ @zvirja рдиреЗ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рд╣реИ ред

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

рд╕реНрдерд╛рдиреАрдп рддрд░реАрдХреЗ рд╕реЗ рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЦреБрд▓рд╛ рд░рдЦреЗрдВ. рдПрдХ рджрд┐рдиред рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВред рдпрд╛ рд╕рд┐рд░реНрдл рдПрдХ рджрд┐рдиред

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

@zvirja @aivascu рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ 2021 рдореЗрдВ async рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдареАрдХ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@Kralizek рдЕрдЧрд░ рдореИрдВ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реВрдВ, рддреЛ рдЕрдиреБрд░реЛрдз рдЕрд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдкреАрдЖрд░ рднреА рд╣реИ рдЬреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдкреАрдЖрд░ рдкрд░ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирдЬрд╝рд░ рдбрд╛рд▓реА рдФрд░ рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдлреАрдбрдмреИрдХ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред
рддреЛ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИ рдпрд╛ рддреЛ рдлреАрдбрдмреИрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдлреАрдбрдмреИрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкреАрдЖрд░ рдлрд╛рдЗрд▓ рдХрд░рдирд╛ рд╣реИред

рдореИрдВ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдкреАрдЖрд░ рдХреЛ рдореЛрдмрд╛рдЗрд▓ рдРрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

JoshKeegan picture JoshKeegan  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zvirja picture zvirja  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zvirja picture zvirja  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zvirja picture zvirja  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Accc99 picture Accc99  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ