рдЬреИрд╕рд╛ рдХрд┐ #268 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, GuardClauseAssertion
рд╡рд░реНрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЧреИрд░- рд╡рд┐рдлрд▓ рддреЗрдЬрд╝ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрд╕рдлрд▓ рдЙрдкрд╡рд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдлрд┐рд░ рднреА, async
рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рджреМрд░рд╛рди рдЕрд╕рдлрд▓ рддреЗрдЬрд╝ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд▓рдЧрддрд╛ рд╣реИред
async
рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рджреМрд░рд╛рди _fail fast_ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд▓рдЧрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХреИрд╕реЗ? рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
@ploeh рдореВрд▓ рд░реВрдк рд╕реЗ, _any_ async
рд╡рд┐рдзрд┐ рд╡рд┐рдлрд▓-рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
```рд╕реА#
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ async рдХрд╛рд░реНрдп
{
рдЕрдЧрд░ (рддрд░реНрдХ == рд╢реВрдиреНрдп) рдирдпрд╛ ArgumentNullException (nameof (рддрд░реНрдХ)) рдлреЗрдВрдХ рджреЗрдВ;
await Task.Yield();
return default;
}
```
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ null
рдХрд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдлреЗрдВрдХрддреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рдлрд▓ Task
рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, GuardClauseAssertion рдЗрд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧреБрдо рдЧрд╛рд░реНрдб рдХреНрд▓реЙрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рдХреЛрдб async
, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЖрдордВрддреНрд░рдг awaited
рдФрд░ рдЕрдкрд╡рд╛рдж рддреБрд░рдВрдд рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИ рдХрд┐ "рдлрд╛рд╕реНрдЯ-рдлреЗрд▓" рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдЗрд╕ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдкрд╡рд╛рдж рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ await
рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдмреЗрд╢рдХ, рдЖрдк рдЗрд╕реЗ рддреБрд░рдВрдд рд╡рд┐рдлрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ ( async
рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдирд┐рдЬреА рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ), рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рдХреЛрдб
async
, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЖрдордВрддреНрд░рдгawaited
рдФрд░ рдЕрдкрд╡рд╛рдж рддреБрд░рдВрдд рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рдмрд┐рдВрджреБ рд╣реИ; рдореИрдВ рдЙрд╕ рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдВ рдХрднреА-рдХрднреА рднрдЯрдХ рдЬрд╛рддрд╛ рд╣реВрдВ рдЬрдм рдХреЛрдИ рдпрд╣ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдмрддрд╛рддрд╛ рд╣реИ (рдереЛрдбрд╝реЗ рд╕рдмреВрдд рдХреЗ рд╕рд╛рде) рдХрд┐ рдХреБрдЫ _impossible_...
рдореИрдВ рдХрднреА-рдХрднреА рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реВрдВ рдЬрдм рдХреЛрдИ рдпрд╣ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рддрд╛рддреНрдкрд░реНрдп рдХрд░рддрд╛ рд╣реИ (рдереЛрдбрд╝реЗ рд╕рдмреВрдд рдХреЗ рд╕рд╛рде) рдХрд┐ рдХреБрдЫ рдЕрд╕рдВрднрд╡ рд╣реИ ...
рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИ
рдЕрдм рдореИрдВ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдмреВрд▓рд┐рдпрди рдзреНрд╡рдЬ рдирд╣реАрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП GuardClauseAssertion
рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ - рдореБрдЭреЗ рдпрд╣ рднреА рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдирд╛ред рдмрд╛рдж рдореЗрдВ рдкреАрдЖрд░ рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВред
рдЕрдм рдореИрдВ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдмреВрд▓рд┐рдпрди рдзреНрд╡рдЬ рди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП
GuardClauseAssertion
рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ @moodmosaic рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛, рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдПрдХ рдмреЗрд╣рддрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЧрд▓рдд рд╣реЛрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реВрдВ
рдпрд╣рд╛рдВ рд╡рд╣ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
async
рдХреАрд╡рд░реНрдб рдХреЛ рд╣рдЯрд╛ рджреЗрдВasync
рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдиреЗрд╕реНрдЯреЗрдб рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВрдЙрджрд╛рд╣рд░рдг:
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 рдЕрдЧрд░ рдореИрдВ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реВрдВ, рддреЛ рдЕрдиреБрд░реЛрдз рдЕрд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдкреАрдЖрд░ рднреА рд╣реИ рдЬреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдкреАрдЖрд░ рдкрд░ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирдЬрд╝рд░ рдбрд╛рд▓реА рдФрд░ рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдлреАрдбрдмреИрдХ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред
рддреЛ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИ рдпрд╛ рддреЛ рдлреАрдбрдмреИрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдлреАрдбрдмреИрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкреАрдЖрд░ рдлрд╛рдЗрд▓ рдХрд░рдирд╛ рд╣реИред
рдореИрдВ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдкреАрдЖрд░ рдХреЛ рдореЛрдмрд╛рдЗрд▓ рдРрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@ploeh рдореВрд▓ рд░реВрдк рд╕реЗ, _any_
async
рд╡рд┐рдзрд┐ рд╡рд┐рдлрд▓-рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:```рд╕реА#рдЧрд╛рд░реНрдбреЗрдбOpenGenericMethodReturningTaskResult(рд╡рд╕реНрддреБ рддрд░реНрдХ)
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ async рдХрд╛рд░реНрдп
{
рдЕрдЧрд░ (рддрд░реНрдХ == рд╢реВрдиреНрдп) рдирдпрд╛ ArgumentNullException (nameof (рддрд░реНрдХ)) рдлреЗрдВрдХ рджреЗрдВ;
}
```
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ
null
рдХрд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдлреЗрдВрдХрддреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рдлрд▓Task
рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, GuardClauseAssertion рдЗрд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧреБрдо рдЧрд╛рд░реНрдб рдХреНрд▓реЙрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИредрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рдХреЛрдб
async
, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЖрдордВрддреНрд░рдгawaited
рдФрд░ рдЕрдкрд╡рд╛рдж рддреБрд░рдВрдд рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИ рдХрд┐ "рдлрд╛рд╕реНрдЯ-рдлреЗрд▓" рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдЗрд╕ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдкрд╡рд╛рдж рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛawait
рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПредрдмреЗрд╢рдХ, рдЖрдк рдЗрд╕реЗ рддреБрд░рдВрдд рд╡рд┐рдлрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ (
async
рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдирд┐рдЬреА рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ), рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред