Runtime: рдПрдЪрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдкрд░ рдЯрд╛рд╕реНрдХ рд░рджреНрдж рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдордИ 2017  ┬╖  119рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dotnet/runtime

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

рдзрдиреНрдпрд╡рд╛рдж

area-System.Net.Http enhancement

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

@karelz рдЗрд╕ рднреНрд░рд╛рдордХ рдЕрдкрд╡рд╛рдж рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдПрдХ рдЕрдиреНрдп рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдиреЛрдЯ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ :)

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

@awithy рдЖрдк .NET Core рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

1.1

рд╕рд╣реА рдбрд┐рдЬрд╝рд╛рдЗрди рдпрд╛ рдирд╣реАрдВ, рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдСрдкрд░реЗрд╢рди рд░рджреНрдж рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ рдЯрд╛рд╕реНрдХ рд░рджреНрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдкрд╡рд╛рдж рдПрдХ рдСрдкрд░реЗрд╢рди рд░рджреНрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдкрд╡рд╛рдж рд╣реИ)ред
cc: @davidsh

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

рдЖрдкрдХреЛ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдЬрд╝рд╛рдЗрди + рдкрд┐рдЫрд▓реЗ 6+ рдорд╣реАрдиреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ 2 рдЧреНрд░рд╛рд╣рдХреЛрдВ рдиреЗ рд╢рд┐рдХрд╛рдпрдд рдХреА рдереАред
рд╕рдорд╛рдкрдиред

@karelz рдЗрд╕ рднреНрд░рд╛рдордХ рдЕрдкрд╡рд╛рдж рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдПрдХ рдЕрдиреНрдп рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдиреЛрдЯ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ :)

рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХреГрдкрдпрд╛ рд╢реАрд░реНрд╖ рдкреЛрд╕реНрдЯ рдХреЛ рднреА рдЕрдкрд╡реЛрдЯ рдХрд░реЗрдВ (рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдзрдиреНрдпрд╡рд╛рдж!

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

рдпрд╣ рдПрдХ рдЦрд░рд╛рдм рдбрд┐рдЬрд╛рдЗрди рдЖрдИрдПрдордУ рд╣реИред рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреБрд░реЛрдз рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрд╛рдиреА рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди SendAsync рдХреЛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдпрд╛ рдпрджрд┐ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкреВрд░реНрд╡ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдПрдХ TimeoutException рд╣реИ рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реЛрдЧрд╛, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?

рд╣рд╛рдБ, рдЗрд╕рдиреЗ рд╣рдорд╛рд░реА рдЯреАрдо рдХреЛ рднреА рдПрдХ рдкрд╛рд╢ рдХреЗ рд▓рд┐рдП рдлреЗрдВрдХ рджрд┐рдпрд╛ред рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдПрдХ рд╕рдВрдкреВрд░реНрдг рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдереНрд░реЗрдб рд╣реИ:

рдореИрдВрдиреЗ рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдерд╛: https://www.thomaslevesque.com/2018/02/25/better-timeout-handling-with-httpclient/

рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдзрдиреНрдпрд╡рд╛рджред

рдмреНрдпрд╛рдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЕрдм рдмрдбрд╝рд╛ рд╣реИ - рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдереНрд░реЗрдб рдореЗрдВ рдЕрдм 69 рдЕрдкрд╡реЛрдЯ рд╣реИрдВред

рд╕реАрд╕реА @ рдбреЙрдЯрдиреЗрдЯ/рдПрдирд╕реАрдПрд▓

рдХреЛрдИ рдЦрдмрд░ ? рдЕрднреА рднреА рдбреЙрдЯрдиреЗрдЯ рдХреЛрд░ 2.0 . рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ

рдпрд╣ 2.1 рдХреЗ рдмрд╛рдж рдХреА рд╢реАрд░реНрд╖ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╣рдорд╛рд░реА рд╕реВрдЪреА рдореЗрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ 2.0/2.1 рдореЗрдВ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрдиреЗ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  1. TaskCanceledException рдХреЗ рдмрдЬрд╛рдп TaskCanceledException TimeoutException рдлреЗрдВрдХреЗрдВред

    • рдкреНрд░реЛ: рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░рджреНрджреАрдХрд░рдг рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ

    • рдХреЙрди: рддрдХрдиреАрдХреА рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди - рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  2. TaskCanceledException рдХреЛ рдЖрдВрддрд░рд┐рдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде TimeoutException рдХреЗ рд░реВрдк рдореЗрдВ рдлреЗрдВрдХ рджреЗрдВ

    • рдкреНрд░реЛ: рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░рджреНрджреАрдХрд░рдг рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╕рдВрдЧрдд рдЕрдкрд╡рд╛рдж рдкреНрд░рдХрд╛рд░ред

    • рдЦреБрд▓рд╛ рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ InnerException ( TimeoutException.InnerException рдХреЗ рд░реВрдк рдореЗрдВ) рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдореВрд▓ TaskCanceledException рд╕реНрдЯреИрдХ рдХреЛ рдлреЗрдВрдХрдирд╛ рдФрд░ рдПрдХ рдирдпрд╛ рдлреЗрдВрдХрдирд╛ рдареАрдХ рд╣реИ? рдпрд╛ рд╣рдореЗрдВ рдореВрд▓ TaskCanceledException рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдФрд░ рд▓рдкреЗрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП?



      • рдпрд╛ рддреЛ: рдирдпрд╛ рдХрд╛рд░реНрдп рд░рджреНрдж рдЕрдкрд╡рд╛рдж -> рдирдпрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд╡рд╛рдж -> рдореВрд▓ рдХрд╛рд░реНрдп рд░рджреНрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдкрд╡рд╛рдж (рдореВрд▓ рдЖрдВрддрд░рд┐рдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЬреЛ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)


      • рдпрд╛: рдирдпрд╛ рдХрд╛рд░реНрдп рд░рджреНрдж рдЕрдкрд╡рд╛рдж -> рдирдпрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд╡рд╛рдж -> рдореВрд▓ рдХрд╛рд░реНрдп рд░рджреНрдж рдЕрдкрд╡рд╛рджред рдЗрдирд░ рдЕрдкрд╡рд╛рдж (рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)



  3. рдХрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде TaskCanceledException рдлреЗрдВрдХреЗрдВ

    • рдкреНрд░реЛ: рд╕рдВрджреЗрд╢ / рд▓реЙрдЧ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░рджреНрджреАрдХрд░рдг рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ

    • Con: рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ "рдХреЗрд╡рд▓ рдбреАрдмрдЧ" рд╣реИред

    • рдЦреБрд▓рд╛ рдкреНрд░рд╢реНрди: [2] рдЬреИрд╕рд╛ рд╣реА рд╣реИ - рдХреНрдпрд╛ рд╣рдореЗрдВ рдореВрд▓ рдЯрд╛рд╕реНрдХ рд░рджреНрдж рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рдж рдХреЛ рд▓рдкреЗрдЯрдирд╛ рдпрд╛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдпрд╣ рдвреЗрд░)

рдореИрдВ рдореВрд▓ TaskCanceledException рдХреЗ рдореВрд▓ рд╕реНрдЯреИрдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк [2] рдХреА рдУрд░ рдЭреБрдХ рд░рд╣рд╛ рд╣реВрдВред
@stephentoub @davidsh рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдмреАрдЯреАрдбрдмреНрд▓реВ: рдкрд░рд┐рд╡рд░реНрддрди HttpClient.SendAsync рдореЗрдВ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рд╣рдо рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдЕрдк рдХрд░рддреЗ рд╣реИрдВ:
https://github.com/dotnet/corefx/blob/30fb78875148665b98748ede3013641734d9bf5c/src/System.Net.Http/src/System/Net/Http/HttpClient.cs#L433 -L461

рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЕрдкрд╡рд╛рдж рд╣рдореЗрд╢рд╛ рдПрдХ HttpRequestException рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ HttpClient рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ API рдореЙрдбрд▓ рд╣реИред

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

рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд▓реНрдк 1 рд╣реИ) рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдРрдк-рд╕рдВрдЧрдд рдПрдкреАрдЖрдИ рдореЙрдбрд▓ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдПрдЪрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рд╕реЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЕрдкрд╡рд╛рдж рд╣рдореЗрд╢рд╛ HttpRequestException рд╣реЛрддреЗ рд╣реИрдВред

рдзреНрдпрд╛рди рджреЗрдВ: рд╕реНрдЯреНрд░реАрдо рдПрдкреАрдЖрдИ рд╕реЗ рд╕реАрдзреЗ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдо рдкрдврд╝рдиреЗ рд╕реЗ рдХреЛрдИ рднреА "рдЯрд╛рдЗрдордЖрдЙрдЯ" рдЬреИрд╕реЗ:

```рд╕реА#
рд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ = рдирдпрд╛ HttpClient ();
рд╕реНрдЯреНрд░реАрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╕реНрдЯреНрд░реАрдо = рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред GetStreamAsync (рдпреВрдЖрд░рдПрд▓);

int рдмрд╛рдЗрдЯреНрд╕рд░реЗрдб = рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВред ReadAsync (рдмрдлрд░, 0, рдмрдлрд░ред рд▓рдВрдмрд╛рдИ);
```

System.IO.IOException рдЖрджрд┐ рдХреЛ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдлреЗрдВрдХрдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ SocketsHttpHandler рдореЗрдВ рдХреБрдЫ рдмрдЧ рд╣реИрдВ)ред

@davidsh рдХреНрдпрд╛ рдЖрдк HttpRequestException рдлреЗрдВрдХрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднреА рдЬрдм рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рджреНрджреАрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ? рд╡реЗ рдЖрдЬ TaskCanceledException рдлреЗрдВрдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ...
рдореИрдВ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ HttpRequestException рдХреЗ рдмрдЬрд╛рдп TaskCanceledException #$2$#$ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрдирдХрд╛рдм рдХрд░рдирд╛ рдареАрдХ рд╣реВрдВред

@davidsh рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рджреНрджреАрдХрд░рдг рд╣реЛрдиреЗ рдкрд░ рднреА HttpRequestException рдХреЛ рдлреЗрдВрдХрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ? рд╡реЗ рдЖрдЬ рдЯрд╛рд╕реНрдХ рд░рджреНрдж рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ тАж

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗ рд╕рдХреВрдВ, рдореБрдЭреЗ рд╕рдЯреАрдХ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рд╣рд┐рдд рд╕реНрдЯреИрдХ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рдЬрдм рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рджреНрджреАрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ

рд╣рдореЗрдВ "рд╕реНрдкрд╖реНрдЯ" рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреА рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HttpClient.Timeout рдЧреБрдг "рд╕реНрдкрд╖реНрдЯ" рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдирд╣реАрдВ рдХрд╣ рд░рд╣реЗ рд╣реИрдВред рдХреИрдВрд╕рд┐рд▓реЗрд╢рди рдЯреЛрдХрдирд╕реЛрд░реНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ .Cancel() рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ (рдЬреЛ рдХреИрдВрд╕рд┐рд▓реЗрд╢рди рдЯреЛрдХрди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ)? рдХреНрдпрд╛ рд╡рд╣ "рд╕реНрдкрд╖реНрдЯ" рд╣реИ? рд╢рд╛рдпрдж рдРрд╕реЗ рдФрд░ рднреА рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдм рдЖрдк HttpClient.Timeout рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ .NET Framework рдЯрд╛рд╕реНрдХ рд░рджреНрдж рдЕрдкрд╡рд╛рдж рднреА рдлреЗрдВрдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд░рджреНрджреАрдХрд░рдг рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдмрд╕ рджреЛрдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдХ рдмрдирд╛рдПрдВ:
```рд╕реА#
рд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯрдЯреЛрдХрди = ....
var innerTokenSource = CancellationTokenSource.CreateLinkedTokenSource (рдХреНрд▓рд╛рдЗрдВрдЯрдЯреЛрдХрди);

If at some point you catch **OperationCancelledException**:
```c#
try
{
     //invocation with innerToken
}
catch(OperationCancelledException oce)
{
      if(clientToken.IsCancellationRequested)
          throw; //as is, it is client initiated and in higher priority
      if(innerToken.IsCancellationRequested)
           //wrap it in HttpException, TimeoutException, whatever, wrap it in another linked token until you process all cases.
}

рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдЯреЛрдХрди рд╕реЗ рдЧрд╣рд░реЗ рддрдХ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рддреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЛ рдЯреЛрдХрди рдирд╣реАрдВ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд░рджреНрджреАрдХрд░рдг рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ 2.2 рдпрд╛ 3.0 рдмрдирд╛ рд░рд╣рд╛ рд╣реИ? @karelz @davidsh , cc @NickCraver ред рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк 1 рдХрд░реЗрдЧрд╛, рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдирдпрд╛ рдПрдЪрдЯреАрдкреАрдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд╡рд╛рдж рдЬреЛ HttpRequestException рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ 2.2 рдпрд╛ 3.0 рдмрдирд╛ рд░рд╣рд╛ рд╣реИ?

2.2 рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ, рдЗрд╕реЗ рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛;)

2.2 рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ, рдЗрд╕реЗ рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛;)

рдЕрд░реНрдШ, рдЬрдм рдореИрдВ рдмреНрд░реЗрдХ рд▓реЗрддрд╛ рд╣реВрдВ рддреЛ рдпрд╣реА рд╣реЛрддрд╛ рд╣реИ;)

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

````рд╕реАрд╢рд╛рд░реНрдк
[рдПрдЪрдЯреАрдкреАрдЧреЗрдЯ]
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ async рдХрд╛рд░реНрдпрдЗрдВрдбреЗрдХреНрд╕ (рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди)
{
рдХреЛрд╢рд┐рд╢ рдХрд░реЛ
{
// рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдпрд╛ рд╕реЗрд╡рд╛ рдкрд░рдд рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣рд╛рдБ рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
рдХреЛрд╢рд┐рд╢ рдХрд░реЛ
{
// HttpClient рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП HttpClientFactory рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рд╡рд░ httpClient = _httpClientFactory.CreateClient ();

        //Set an absurd timeout to illustrate the point
        httpClient.Timeout = new TimeSpan(0, 0, 0, 0, 1);

        //Perform call that requires special timeout logic                
        var httpResponse = await httpClient.GetAsync("https://someurl.com/api/long/running");

        //... (if GetAsync doesn't fail, handle the response as desired)
    }
    catch (OperationCanceledException innerOperationCanceled)
    {
        //If a canceled token exception occurs due to a timeout, "IsCancellationRequested" should be false
        if (cancellationToken.IsCancellationRequested)
        {
            //Bubble exception to global handler
            throw innerOperationCanceled;
        }
        else
        {
            //... (perform timeout logic here)
        }                    
    }                

}
catch (OperationCanceledException operationCanceledEx)
{
    _logger.LogWarning(operationCanceledEx, "Request was aborted by the end user.");
    return new StatusCodeResult(499);
}
catch (Exception ex)
{
    _logger.LogError(ex, "An unexepcted error occured.");
    return new StatusCodeResult(500);
}

}
````

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

рдПрдЪрдЯреАрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЬрд╡рд╛рдм рд╣реИред HttpClient рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

[HttpGet]
public async Task<IActionResult> Index(CancellationToken cancellationToken)
{
  try
  {
      //This would normally be done in a business logic or service layer rather than in the controller itself but I'm illustrating the point here for simplicity sake
      try
      {
          //Using HttpClientFactory for HttpClient instances      
          var httpClient = _httpClientFactory.CreateClient();

          //Set an absurd timeout to illustrate the point
          httpClient.Timeout = new TimeSpan(0, 0, 0, 0, 1);

          //Perform call that requires special timeout logic                
          var httpResponse = await httpClient.GetAsync("https://someurl.com/api/long/running");

          //... (if GetAsync doesn't fail, handle the response as desired)
      }
      catch (OperationCanceledException innerOperationCanceled)
      {
          //If a canceled token exception occurs due to a timeout, "IsCancellationRequested" should be false
          if (cancellationToken.IsCancellationRequested)
          {
              //Bubble exception to global handler
              throw innerOperationCanceled;
          }
          else
          {
              //... (perform timeout logic here)
          }                    
      }                

  }
  catch (OperationCanceledException operationCanceledEx)
  {
      _logger.LogWarning(operationCanceledEx, "Request was aborted by the end user.");
      return new StatusCodeResult(499);
  }
  catch (Exception ex)
  {
      _logger.LogError(ex, "An unexepcted error occured.");
      return new StatusCodeResult(500);
  }
}

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

рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдмреЗрддреБрдХрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдиреГрд╢рдВрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред HttpClient Microsoft рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рд▓реАрдХреА рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рд╣реИ

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

рдПрдЪрдЯреАрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЬрд╡рд╛рдм рд╣реИред HttpClient рдХреЛ рдорд┐рдЯрд╛рдиреЗ рдФрд░ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред\

рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдпрд╛ рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИ @dotnetchris ред рдЧреНрд░рд╛рд╣рдХ рдФрд░ MSFT рдХрд░реНрдордЪрд╛рд░реА рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд╣реИрдВ, рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ @karelz рдЬреИрд╕реЗ рд▓реЛрдЧ рдЕрднреА рднреА рдпрд╣рд╛рдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реБрди рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрдирдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЙрдирдХреА рд╕рджреНрднрд╛рд╡рдирд╛ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХрддрд╛ рд╕реЗ рдирд╣реАрдВ рдЬрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╡реЗ рдЕрдкрдиреА рдЧреЗрдВрдж рд▓реЗрдиреЗ рдФрд░ рдШрд░ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдмреБрд░рд╛ рд╣реЛрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рдж! :)

рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рдПрдХ HttpClient2 (рдЕрд╕реНрдерд╛рдпреА рдирд╛рдо) рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЬрд┐рд╕рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХрд┐ "HttpClient рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реИ, рдХреГрдкрдпрд╛ HttpClient2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ 2 рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрд╛рдпрд╛ред

рдЗрд╕ рддрд░рд╣ .NetFramework рдореЗрдВ рдХреЛрдИ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдореИрдВрдиреЗ рдпрд╣ рднреА рдмреНрд▓реЙрдЧ рдХрд┐рдпрд╛ рдХрд┐ 3 рд╕рд╛рд▓ рдкрд╣рд▓реЗ HttpClient рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдмреБрд░рд╛ рд╣реИред https://dotnetchris.wordpress.com/2015/12/11/working-with-httpclient-is-absurd/

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдбрд┐рдЬрд╛рдЗрди рд╣реИред

рдХреНрдпрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдореЗрдВ рдХрд┐рд╕реА рдиреЗ рднреА рдПрдЪрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ? рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рдлрд┐рд░ рдЗрд╕ рднрдпрд╛рдирдХ рдПрдкреАрдЖрдИ рд╕рддрд╣ рд╕реЗ рдкрд░реЗ, рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реАрдХреА рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рд╣реИрдВред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдмрд┐рд▓реНрдХреБрд▓ рдирдпрд╛ рд╣реА рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рд╣реИред HttpClient2, HttpClientSlim рдареАрдХ рд╣реИ рдпрд╛ рдЬреЛ рднреА рд╣реЛред

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

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

@dotnetchris рдЪреВрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬреБрдиреВрди рд╣реИ, рдХреНрдпреЛрдВ рди HttpClient2 рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреВрд░реНрдг API рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирдП рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЯреАрдо рдХреЛ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ?

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

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

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

@karelz 3.0 рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓ рдкрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рдХрд┐рд╕реА рд╕реЗ рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡?

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

@karelz рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдореБрджрд╛рдп рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдмрддрд╛рдпрд╛ рдХрд┐ рдореИрдВ рдЖрдкрдХреЗ рд╕рдВрджреЗрд╢ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдерд╛ рдЬреЛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ "рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдХрд┐ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ:" рдпрджрд┐ рдЯреАрдо рдиреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪреАрдмрджреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдиреЗ рдХреЛрдИ рджрд┐рд╢рд╛ рддрдп рдХрд░ рд▓реА рд╣реИ рддреЛ рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдзрдиреНрдпрд╡рд╛рдж!

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдпрд╣ рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд╣реИред рдирд┐рд░реНрдгрдп рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдЕрдиреБрдореЛрджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдВрддрд░ рдХреЛ рдХреИрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рдкрд░ рд╣рдореЗрдВ рдЧрдардмрдВрдзрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдХреБрдЫ рдЪрд░реНрдЪрд╛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
рдореБрдЭреЗ рдпрд╣ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ - рдпрджрд┐ рд╕рдореБрджрд╛рдп рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд▓реНрдк рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╣рдореЗрдВ рд╡рд╣рд╛рдВ 98% рдорд┐рд▓реЗрдЧрд╛ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЕрдкрд╡рд╛рдж рдПрдХ рдЬрдЧрд╣ рд╕реЗ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ [1]-[3] рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛)ред

рдирдорд╕реНрддреЗ! рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рднреА рдорд╛рд░рд╛ред рдмрд╕ рдЙрддреНрд╕реБрдХ рдЕрдЧрд░ рдпрд╣ рдЕрднреА рднреА рдЖрдкрдХреЗ рд░рдбрд╛рд░ рдкрд░ 3.0 рдХреЗ рд▓рд┐рдП рд╣реИ?

рд╣рд╛рдВ, рдпрд╣ рдЕрднреА рднреА рд╣рдорд╛рд░реА 3.0 рд╕реВрдЪреА рдореЗрдВ рд╣реИ - рдореИрдВ рдЗрд╕реЗ рдЕрднреА рднреА 90% рдореМрдХрд╛ рджреВрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ 3.0 рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рдЖрдЬ рдЗрд╕ рдкрд░ рднрд╛рдЧрд╛ред рдореИрдВрдиреЗ рдПрдЪрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдореБрдЭреЗ рдпрд╣ рджреЗрддрд╛ рд╣реИ:

{System.Threading.Tasks.TaskCanceledException: A task was canceled.}
CancellationRequested = true

рдореИрдВ рджреВрд╕рд░реЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред

рдЙрдореНрдо, рдареАрдХ рд╣реИ, рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рд╣рд░ рдХреЛрдИ рдХрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ HTTP рдЯрд╛рдЗрдордЖрдЙрдЯ TaskCanceledException рдлреЗрдВрдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╣ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ ... рдореБрдЭреЗ .NET рдХреЛрд░ 2.1 рдореЗрдВ OperationCanceledException рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ ...

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

https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.sendasync

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП HttpRequestException рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИ ...

рдХрд╛рд░реНрдп рд░рджреНрдж рдЕрдкрд╡рд╛рдж рдСрдкрд░реЗрд╢рди рд░рджреНрдж рдЕрдкрд╡рд╛рдж рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИред

@stephentoub рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ TaskCanceledException рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ OperationCanceledException рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐, рдПрдХ рдХреИрдЪ рдмреНрд▓реЙрдХ рдЬреЛ TaskCanceledException рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ рд╡рд╣ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ OperationCanceledException рдХреЗ рд▓рд┐рдП рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдм рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдкрд╡рд╛рдж рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдХреЗ HTTP рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реИ рдпрджрд┐ рдпрд╣ TaskCanceledException рдирд╣реАрдВ рд╣реИ:

```рд╕реА#
рдХреЛрд╢рд┐рд╢ рдХрд░реЛ {
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ (var рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = рдкреНрд░рддреАрдХреНрд╖рд╛ s_httpClient.SendAsync (рдЕрдиреБрд░реЛрдз, _updateCancellationSource.Token)ред ConfigureAwait (рдЧрд▓рдд))
рд╡рд╛рдкрд╕реА (int) рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рд╕реНрдерд┐рддрд┐ рдХреЛрдб <400;
}
рдкрдХрдбрд╝реЗрдВ (рдСрдкрд░реЗрд╢рди рд░рджреНрдж рдЕрдкрд╡рд╛рдж рдкреВрд░реНрд╡) рдЬрдм (рдЙрджрд╛ред рдЧреЗрдЯ рдЯрд╛рдЗрдк ()! = рдЯрд╛рдЗрдкрдСрдл (рдЯрд╛рд╕реНрдХ рд░рджреНрдж рдЕрдкрд╡рд╛рдж)) {
// HTTP рдЯрд╛рдЗрдордЖрдЙрдЯ
рд╡рд┐рд╡рд░рдг рдЭреВрдард╛ рд╣реИ;
}
рдкрдХрдбрд╝реЗрдВ (HttpRequestException) {
рд╡рд┐рд╡рд░рдг рдЭреВрдард╛ рд╣реИ;
}

or alternatively this works as well, which might be better:

```c#
            try {
                using (var response = await s_httpClient.SendAsync(request, _updateCancellationSource.Token).ConfigureAwait(false))
                    return (int)response.StatusCode < 400;
            }
            catch (OperationCanceledException ex) when (ex.GetType() == typeof(OperationCanceledException)) {
                // HTTP timeout
                return false;
            }
            catch (HttpRequestException) {
                return false;
            }

рдЙрдореНрдо, рдареАрдХ рд╣реИ, рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рд╣рд░ рдХреЛрдИ рдХрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ HTTP рдЯрд╛рдЗрдордЖрдЙрдЯ TaskCanceledException рдлреЗрдВрдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╣ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ ... рдореБрдЭреЗ .NET рдХреЛрд░ 2.1 рдореЗрдВ OperationCanceledException рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ ...

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

https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.sendasync

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП HttpRequestException рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИ ...

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

@ рд╣реЛрдмреНрд░реЗ рд╣рд╛рдБ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ - рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛? рдпрд╣ рдЕрднреА рднреА рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХрд┐рддрдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдкрд░ TaskCanceledException рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рд╣реВрдВред

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

@mikernet рд╢рд╛рдпрдж рд╢рдмреНрджреЛрдВ рдиреЗ рдореБрдЭреЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ред рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рд╕рдВрднрд╛рд╡рд┐рдд рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдврд╝рд┐рдпрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

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

@ рд╣реЛрдмреНрд░реЗ рд╣рд╛рд╣рд╛ рд╣рд╛рдБ - рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧреВрдврд╝ рд╣реЛрдиреЗ рдХрд╛ рдирд╣реАрдВ рдерд╛, рдореИрдВ рдмрд╕ рдЕрдкрдиреЗ рдлреЛрди рдкрд░ рдерд╛ рдЬрдм рдореИрдВ рдЙрд╕ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдХреЛ рдЯрд╛рдЗрдк рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ред

рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм HttpClient рдЯрд╛рдЗрдордЖрдЙрдЯ рдФрд░ рдЙрд╕ рдмрд┐рдВрджреБ рдХреЗ рдмреАрдЪ рдХрд╛рд░реНрдп рд░рджреНрджреАрдХрд░рдг рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рд░рджреНрджреАрдХрд░рдг рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореБрдЭреЗ рдмреБрд▓рдмреБрд▓реЗ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рд░рджреНрджреАрдХрд░рдг рдЕрдкрд╡рд╛рдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЛрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рджреНрджреАрдХрд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХреЗ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореБрдЭреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реИ - рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ when рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдкрдХрдбрд╝ рдХреЛ рдЫрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдПред рдЯреЛрдХрди рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдмреБрджрдмреБрджрд╛рдиреЗ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреНрд░реИрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ $# OperationCanceledException 2$#$ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдСрдкрд░реЗрд╢рди рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдЧрд╛ TaskCanceledException рдлреЗрдВрдХреЗ рдЬрд╛рдиреЗ рдХреА, рдирд╣реАрдВ рдПрдХ OperationCanceledException ред

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

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

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

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

рдореИрдВ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рд╕рд╣реА рдХрд╛рдордХрд╛рдЬ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдореБрдЭреЗ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╕реБрдирдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдЬреЛ рджрд╛рд╡рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЯрд╛рд╕реНрдХ рд░рджреНрдж рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рдж рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдмрдбрд╝реА рдмрдЧ рд╣реЛрдЧреАред рдореБрдЭреЗ рдХреБрдЫ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

@mikernet рдЪрд╛рд╣реЗ TaskCanceledException рдпрд╛ OperationCanceledException рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реЛ, рдХрд╛рдлреА рд╣рдж рддрдХ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдкрдХреЛ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ OperationException (рдЬреЛ TaskCanceledException рдХреЛ рднреА рдкрдХрдбрд╝ рд▓реЗрдЧрд╛) рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛрдмреНрд░реЗ рдХреА рдЯрд┐рдкреНрдкрдгреА (https://github.com/) рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред dotnet/corefx/issues/20296#issuecomment-449510983)ред

@thomaslevesque рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкрддрд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рд╣реИред рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ - рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд░реВрдкрд╛рдВрддрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдХреЗрд╡рд▓ рдмрдпрд╛рдиреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛ рд░рд╣рд╛ рд╣реИред

"рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИ" рдХреЗ рд▓рд┐рдП - рд╣рд╛рдБ рдпрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рдерд╛ред рд╡рд░реНрдгрд┐рдд рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рджреЛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдЕрдкрд╡рд╛рдж рд╣реБрдЖ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ 100% рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред OperationCanceledException рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк рд╣реИ ... рдврд╛рдВрдЪреЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ TimeoutException рд╣реИ рдЬреЛ рдПрдХ рдмреЗрд╣рддрд░ рдЙрдореНрдореАрджрд╡рд╛рд░ рдмрдирд╛рддрд╛ рд╣реИред

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

рд╕рд╛рде рд╣реА, рдЕрдкрд╡рд╛рдж рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ ... рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд .NET рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкреНрд░рдерд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд╣реАрдВред .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдирд╛рдо рджреЗрдВ рдЬрд╣рд╛рдВ рдкреНрд░рд▓реЗрдЦрди рдХрд╣рддрд╛ рд╣реИ "рдЬрдм Y рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЕрдкрд╡рд╛рдж X рдлреЗрдВрдХрддрд╛ рд╣реИ" рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рдЙрдкрд╡рд░реНрдЧ рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдЕрдХреЗрд▓реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рдЙрдкрд╡рд░реНрдЧ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЕрдкрд╡рд╛рдж рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдПрдХ рд╣реА рддрд░реАрдХрд╛ ! рдпрд╣ рд╕рд┐рд░реНрдл рдЦрд░рд╛рдм рдлреЙрд░реНрдо рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ 15 рд╡рд░реНрд╖реЛрдВ рдХреЗ .NET рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрднреА рднреА рдЗрд╕рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рд╣реИред

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

@mikernet рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдЪрд░реНрдЪрд╛ рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ред рд╣рд╛рдВ, рдПрдХ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдЙрддрдиреА рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рдЬрд┐рддрдиреА рд▓рдЧрддреА рд╣реИ... рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рд╕рдордпрдмрд╛рд╣реНрдп рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЯреЛрдХрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рд╣реИ рдирд╛? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЕрдЧрд░ рдСрдкрд░реЗрд╢рди рдХреЛ рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реБрдЖред рддреЛ рдЖрдк рдПрдХ OperationCanceledException рдмрдмрд▓ рдЕрдк рд╣реЛрдиреЗ рджреЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдСрдкрд░реЗрд╢рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХрд┐ рдПрдХ рдЭреВрда рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реБрдЖ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЪрд╛рд╣рддреЗ рдереЗ рд╡реИрд╕реЗ рднреА рдСрдкрд░реЗрд╢рди рдХреЛ рдирд┐рд░рд╕реНрдд рдХрд░реЗрдВред

рд╡рд░реНрдгрд┐рдд рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рджреЛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдЕрдкрд╡рд╛рдж рд╣реБрдЖ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ 100% рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред OperationCanceledException рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк рд╣реИ ... рдврд╛рдВрдЪреЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ TimeoutException рд╣реИ рдЬреЛ рдПрдХ рдмреЗрд╣рддрд░ рдЙрдореНрдореАрджрд╡рд╛рд░ рдмрдирд╛рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВ, рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк @karelz рдХреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд╡рд┐рдХрд▓реНрдк 1 рд╣реИред рд╣рд╛рдВ, рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдмреЗрд╕ рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд╡реИрд╕реЗ рднреА рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдФрд░ рдЦрд░рд╛рдм рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

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

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

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

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╣реИрдХреА рд╣реИ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рд╣реИ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

http рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ HttpClient рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд╡рд╛рдж рд╕рд╛рдорд╛рдиреНрдп System.TimeoutException рдХреЗ рдмрдЬрд╛рдп System.Net.HttpRequestException (рдпрд╛ рд╡рдВрд╢рдЬ?) рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ WebClient рдПрдХ Status рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде WebException $ рдлреЗрдВрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ WebExceptionStatus.Timeout рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ 3.0 рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред рднрд╡рд┐рд╖реНрдп рдХреА рдУрд░ рдмрдврд╝ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рдмреИрдХрд▓реЙрдЧ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╣рдо рдЗрд╕реЗ 3.0 рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ :(ред

@karelz рдУрд╣ рдирд╣реАрдВ :(

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

@mikernet рдХреА рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд▓рд╛рдЗрдХ рдХрд░реЗрдВ:

рдЬреИрд╕рд╛ рдХрд┐, рдПрдХ рдХреИрдЪ рдмреНрд▓реЙрдХ рдЬреЛ рдЯрд╛рд╕реНрдХрдХреИрдВрд╕рд▓реНрдб рдПрдХреНрд╕реЗрдкреНрд╢рди рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдЕрдкрд╡рд╛рдж рдХреЛ рдирд╣реАрдВ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдСрдкрд░реЗрд╢рди рдХреИрдВрд╕рд┐рд▓реНрдб рдПрдХреНрд╕реЗрдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

cc @davidsh @stephentoub рд╢рд╛рдпрдж?

рдХрд╛рд░реНрдп рд░рджреНрдж рдЕрдкрд╡рд╛рдж рдСрдкрд░реЗрд╢рди рд░рджреНрдж рдЕрдкрд╡рд╛рдж рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рдмрд╕ рдСрдкрд░реЗрд╢рди рд░рджреНрдж рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝реЗрдВред

@karelz рд╡рд┐рдХрд▓реНрдк 1 рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛, рдмрд╕ рдЗрд╕реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рд╛рдкреНрдп рд╣реЛ?

StackExchange.Redis рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд╡рд╛рдж рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдЪрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ ...

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ @stephentoub рдиреЗ рд╡рд┐рд░рд╛рд╕рдд рджреА рд╣реИ, рдмрд╕ @mikernet рд╕реЗ рдиреАрдЪреЗ рдХреА рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рдЙрдбрд╝рд╛ рд░рд╣реА рд╣реИ ... рд╡рд╣ рдЬрд┐рд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ?? рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕рд╣реА рд╣реИ, рддреЛ рдлрд┐рдХреНрд╕ рдпрд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ ...

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

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

@mikernet рдХреА рдмрд╕ рдиреАрдЪреЗ рджреА рдЧрдИ рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рдЙрдбрд╝рд╛ рд░рд╣реА рд╣реИ ... рд╡рд╣ рдЬрд┐рд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ??

рд╡рд╣ "рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдХреЛ рдЙрдбрд╝рд╛ рд░рд╣рд╛ рд╣реИ" рдХреНрдпреЛрдВ рд╣реИ? рдпрджрд┐ рдЕрдкрд╡рд╛рдж рдмреА рдЕрдкрд╡рд╛рдж рдП рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИ, рддреЛ рдмреА рдХреЗ рд▓рд┐рдП рдПрдХ рдХреИрдЪ рдмреНрд▓реЙрдХ рдПрдХ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдкрдХрдбрд╝реЗрдЧрд╛ рдЬреЛ рдХрд┐ рдареЛрд╕ рд░реВрдк рд╕реЗ рдП рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ ArgumentNullException рдХреЗ рд▓рд┐рдП рдХреИрдЪ рдмреНрд▓реЙрдХ рд╣реИ, рддреЛ рдпрд╣ "рдирдпрд╛ ArgumentException (...) рдлреЗрдВрдХреЗрдВ" рдирд╣реАрдВ рдкрдХрдбрд╝реЗрдЧрд╛ред

рдпрд╛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ рдпрд╣ рдСрдкрд░реЗрд╢рдирдПрдХреНрд╕ рдФрд░ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдХреЛ рдЯрд╛рд╕реНрдХрдПрдХреНрд╕ рдлреЗрдВрдХрддрд╛ рд╣реИ?

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

рдзрдиреНрдпрд╡рд╛рдж рд╕реНрдЯреАрдлрди, рдзрд╛рдЧреЗ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╛рдЬрд╝ рд╕реЗ рдХрдИ рд▓реЛрдЧ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдереЗ рдХрд┐ рдЯрд╛рд╕реНрдХрд╕реАрдИ рдХреЛ рд╣рд░ рдЬрдЧрд╣ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рдЬрд┐рд╕рд╕реЗ рдорд┐рдХрд░реНрдиреЗрдЯ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрддрд╛ ... рдЕрдм рдЬрдм рдЖрдкрдиреЗ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрд╕рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЕрд╡рд▓реЛрдХрди рддрд╛рд░реНрдХрд┐рдХ :)

@stephentoub , рдХреНрдпрд╛ рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд╣реАрдВ рднреА рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ? рдкрд┐рдВрдЧрд┐рдВрдЧ @guardrex

рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ OCE рдорд╛рди рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП ...

рдореИрдВ рдЗрди рджрд┐рдиреЛрдВ ASP.NET рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рдбреЙрдЯрдиреЗрдЯ/рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ ...

https://github.com/dotnet/docs/issues

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░рд╛ рдореБрджреНрджрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЧрд┐рд▓рд╣рд░реА рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдРрд╕реЗ рдЕрдиреНрдп рд▓реЛрдЧ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдЪрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рдореЙрдбрд▓ рдореЗрдВ рд╣рд┐рд╕реНрд╕реЗрджрд╛рд░реА/рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХреБрдЫ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдзрдиреНрдпрд╡рд╛рдж рдПрдХ рдЯрди рд╕рдм!

рдореБрдЭреЗ рдпрд╣рд╛рдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ - рд╣рд╛рд▓рд╛рдВрдХрд┐, cancellationToken.IsCancellationRequested true рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ:

    public class TimeoutHandler : DelegatingHandler
    {
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            try
            {
                var response = await base.SendAsync(request, cancellationToken);
                response.EnsureSuccessStatusCode();

                return response;
            }
            catch (OperationCanceledException) when (!cancellationToken.IsCancellationRequested)
            {
                throw new TimeoutException("Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.");
            }
        }

рдореИрдВ рдПрдХ рд╕рдордпрдмрд╛рд╣реНрдп рдордЬрдмреВрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдЕрдкрд╡рд╛рдж TaskCancelledException рд╣реИ рдЬрд┐рд╕рдореЗрдВ IOException рдЖрдВрддрд░рд┐рдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ:

System.Threading.Tasks.TaskCanceledException: The operation was canceled. ---> System.IO.IOException: Unable to read data from the transport connection: A opera├з├гo de E/S foi anulada devido a uma sa├нda de thread ou a uma requisi├з├гo de aplicativo. ---> System.Net.Sockets.SocketException: A opera├з├гo de E/S foi anulada devido a uma sa├нda de thread ou a uma requisi├з├гo de aplicativo
   --- End of inner exception stack trace ---
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error)
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16 token)
   at System.Net.Http.HttpConnection.FillAsync()
   at System.Net.Http.HttpConnection.ReadNextResponseHeaderLineAsync(Boolean foldedHeadersAllowed)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)

...

(рдЕрдиреБрд╡рд╛рджрд┐рдд рдЕрдкрд╡рд╛рдж рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ - рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдХрд┐рд╕реА рдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдЗрд╕реЗ .NET рдХреЛрд░ рдореЗрдВ рднреА рд▓рд╛рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛)

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IsCancellationRequest рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдордЖрдЙрдЯ рдкрд░ рднреА рдпрд╣ true рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИред

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

рд╣рд╛рдп @FelipeTaveira ,

рдЖрдкрдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд░рджреНрджреАрдХрд░рдг рдХреЛ рдЖрдкрдХреЗ TimeoutHandler рдХреЗ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдореЗрдВ HttpClient рджреНрд╡рд╛рд░рд╛ рд╣реА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ $#$3 Timeout HttpClient рджреНрд╡рд╛рд░рд╛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЬрд╛рдВрдЪрдирд╛ рдХрд┐ рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЙрд╕ рдХреЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ HttpClient рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ, рди рдХрд┐ HttpClient рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдП рдЧрдП рдХреЛрдб рдореЗрдВред

рдЗрд╕реЗ рдХрд╕реНрдЯрдо рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ HttpClient рдХреЗ Timeout рдХреЛ Timeout.InfiniteTimeSpan рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдХреЗ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ( рдпрд╣рд╛рдВ рдкреВрд░рд╛ рдХреЛрдб)

@thomaslevesque рдУрд╣, рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рд╛ рдерд╛ рдФрд░ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╣рд┐рд╕реНрд╕рд╛ рдкреНрд░рддрд┐-рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдерд╛ рдФрд░ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрд╛ рдерд╛ рдХрд┐ TimeoutException рдЪреАрдЬрд╝ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рдерд╛ред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореБрдЭреЗ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯ рдкрд░ TaskCanceledException рдлреЗрдВрдХрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

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

@eiriktsarpalis рдзрдиреНрдпрд╡рд╛рджред рд╣рдо рдЗрд╕реЗ 5.0 рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЙрд╕ рд╕рдордп рд╕реАрдорд╛ рдореЗрдВ рдЗрд╕реЗ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рдЬрдм рдЖрдк рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЧрдП рд╣реИрдВред

1 рд╕рд╛рд▓? .NET рдХреЛрд░ рдХреА рд╡рд╣ рд╡рд╛рджрд╛ рдХреА рдЧрдИ рдЪрдкрд▓рддрд╛ рдХрд╣рд╛рдБ рд╣реИ?

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

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

рдПрдХ рдореБрджреНрджреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЪрдкрд▓рддрд╛ рдХреЛ рдЖрдВрдХрдирд╛ рдереЛрдбрд╝рд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИред

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

рд╕рдордЭреМрддреЛрдВ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ... рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЪрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

рд╣рдо TaskCanceledException рдлреЗрдВрдХрдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ CancellationToken рдХреЛ рдПрдХ рд╕рдВрддрд░реА рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

c# catch(TaskCanceledException ex) when(ex.CancellationToken == HttpClient.TimeoutToken) { }

рдФрд░ рджреВрд╕рд░рд╛: рдПрдХ рдирдпрд╛ HttpTimeoutException рдлреЗрдВрдХреЗрдВ рдЬреЛ TaskCanceledException рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИред

рдФрд░ рджреВрд╕рд░рд╛: рдПрдХ рдирдпрд╛ HttpTimeoutException рдлреЗрдВрдХреЗрдВ рдЬреЛ TaskCanceledException рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИред

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

рдФрд░ рджреВрд╕рд░рд╛: рдПрдХ рдирдпрд╛ HttpTimeoutException рдлреЗрдВрдХ рджреЗрдВ рдЬреЛ рдЯрд╛рд╕реНрдХ рд░рджреНрдж рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рдж рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИред

рдпрд╣ рдмрд▓реНрдХрд┐ рдмрджрд╕реВрд░рдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдордЭреМрддрд╛ рд╣реИред

рдФрд░ рджреВрд╕рд░рд╛: рдПрдХ рдирдпрд╛ HttpTimeoutException рдлреЗрдВрдХреЗрдВ рдЬреЛ TaskCanceledException рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИред

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

рдареАрдХ рд╣реИ, рд╡рд╣рд╛рдБ _could_ рд▓реЛрдЧ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрдб рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ:

try
{
  // ...
}
catch (Exception ex) when (ex.GetType() == typeof(TaskCanceledException))
{
}

рддреЛ рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреЛрдиреЛрдВ рджреБрдирд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╣реИред рд╣рдореЗрдВ рдЕрднреА рднреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп TimeoutException рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред

рдРрд╕реЗ рд▓реЛрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрдб рд▓рд┐рдЦ рд░рд╣реЗ рд╣реЛрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рд▓рдЧрднрдЧ рд╣рд░ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрднрд╡рддрдГ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреА рд╣реЛрдЧреАред Corefx рдореЗрдВ рд╣рдо рдмреНрд░реЗрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдпрд╛ рдлреЗрдВрдХрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/breaking-change-rules.md#exceptions

рд╕рдордЭреМрддреЛрдВ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ... рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЪрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

рд╣рдо TaskCanceledException рдлреЗрдВрдХрдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ CancellationToken рдХреЛ рдПрдХ рд╕рдВрддрд░реА рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

catch(TaskCanceledException ex) when(ex.CancellationToken == HttpClient.TimeoutToken)
{
}

рдореБрдЭреЗ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рд╣реИред ""рдмрджрд╕реВрд░рдд"" рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реИ? рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрдиреЗ рдкрд░ рдЖрдЬ ex.CancellationToken рдХреНрдпрд╛ рд╣реИ?

""рдмрджрд╕реВрд░рдд"" рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реИ?

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

рдореБрдЭреЗ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рд╣реИред ""рдмрджрд╕реВрд░рдд"" рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реИ? рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрдиреЗ рдкрд░ рдЖрдЬ ex.CancellationToken рдХреНрдпрд╛ рд╣реИ?

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

рдореБрдЭреЗ OperationCanceledException рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рдмрд╛рдзрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рди рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреНрд░реБрдЯрд┐ред рдЕрдкрд╡рд╛рдж HttpClient рдЯрд╛рдЗрдордЖрдЙрдЯ рдкрд░ рдлреЗрдВрдХрддрд╛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ - рдПрдХ HTTP рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдерд╛, рдФрд░ рдпрд╣ рдЕрдиреБрдкрд▓рдмреНрдз рдерд╛ред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╛ рддреЛ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ASP.NET рдХреЛрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реИ рдХрд┐ OperationCanceledException рдХреЗ рджреЛ рд╕реНрд╡рд╛рдж рд╣реИрдВ, рддреНрд░реБрдЯрд┐ рдФрд░ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ, рдпрд╛ рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ HttpClient рдХреЙрд▓ рдХреЛ рдереНрд░реЛ-рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддрд╛ рд╣реИред

рдФрд░ рджреВрд╕рд░рд╛: рдПрдХ рдирдпрд╛ HttpTimeoutException рдлреЗрдВрдХ рджреЗрдВ рдЬреЛ рдЯрд╛рд╕реНрдХ рд░рджреНрдж рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рдж рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИред

рдпрд╣ рдмрд▓реНрдХрд┐ рдмрджрд╕реВрд░рдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдордЭреМрддрд╛ рд╣реИред

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

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

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @scalablecory рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдореБрджреНрджрд╛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рдирд╣реАрдВ рдмрдирдиреА рдЪрд╛рд╣рд┐рдПред рдЖрдк рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛рд░рдг рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░рд╡рд╛рдж рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдХреГрдкрдпрд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рди рдХрд░реЗрдВ ... рдЖрдк рдмрд╛рдж рдореЗрдВ рдЕрдкрд╡рд╛рдж рдореЗрдВ рд╣рдореЗрд╢рд╛ Reason рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ @thomaslevesque рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ; рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИред рдпрд╣ рдХрд╣рд╛рдБ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ?

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

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

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

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

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

рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдХреНрдпрд╛ рдЖрдк рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВрдЧреЗ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ? рдореЗрд░реЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирдирд╛ рдХрд┐ рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реБрдЖ рдЖрдорддреМрд░ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

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

@davidsh рдореЗрдВ рдХреБрдЫ рдФрд░ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдореИрдВ @thomaslevesque рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ; рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИред рдпрд╣ рдХрд╣рд╛рдБ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ?

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

@ dotnet/ncl @stephentoub рдЗрд╕реЗ рдмрд┐рд╕реНрддрд░ рдкрд░ рдбрд╛рд▓ рджреЗрдВред рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХрд░реЗрдВрдЧреЗ рд╡рд╣ рд╕реВрдХреНрд╖реНрдо рд░реВрдк рд╕реЗ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдХрдо рд╕реЗ рдХрдо рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ:

рдПрдХ рдирдпрд╛ HttpTimeoutException рдлреЗрдВрдХреЗрдВ рдЬреЛ TaskCanceledException рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИред

рдЖрдкрддреНрддрд┐рдпрд╛рдВ?

рдПрдХ рдирдпрд╛ HttpTimeoutException рдлреЗрдВрдХреЗрдВ рдЬреЛ рдЯрд╛рд╕реНрдХ рд░рджреНрдж рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рдж рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИред

рд╣рдо рдЗрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рдЗрд╕рдХрд╛ рд╢рд╛рдпрдж рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдирд╛ рдХреЛрдб рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рдХрд╣рддреЗ рд╣реИрдВред рдереНрд░реЛрдЗрдл рдХреИрдВрд╕реЗрд▓реЗрд╢рди рдЕрдиреБрд░реЛрдзрд┐рдд рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ:

c# if (token.IsCancellationRequested) throw new HttpTimeoutException(EXTRASTUFF, token);

рд╕рд╛рде рд╣реА рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕реНрдерд╛рди рдЬрд┐рд╕реЗ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ OperationCancelledException рднреА рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡реИрд╕реЗ рднреА рдЙрд╕ рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?

рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡реИрд╕реЗ рднреА рдЙрд╕ рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?

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

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

рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡реИрд╕реЗ рднреА рдЙрд╕ рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?

рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред

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

рдпрд╣ рдПрдЪрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реА рд╣реИ рдЬреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рд╕реНрд░реЛрдд рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ:
https://github.com/dotnet/corefx/blob/bdd33976fe3713cc3e78b83cf2a1176c70b793be/src/System.Net.Http/src/System/Net/Http/HttpClient.cs#L488
рдЯрд╛рдЗрдордЖрдЙрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдЪрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рд░рджреНрджреАрдХрд░рдг рдЕрдкрд╡рд╛рдж рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрднрд░рд╛ рд╣реИред

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

рдлрд┐рд░ HttpClient рдЬреИрд╕реЗ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ:
https://github.com/dotnet/corefx/blob/bdd33976fe3713cc3e78b83cf2a1176c70b793be/src/System.Net.Http/src/System/Net/Http/HttpClient.cs#L536 -L541
рддрдерд╛
https://github.com/dotnet/corefx/blob/bdd33976fe3713cc3e78b83cf2a1176c70b793be/src/System.Net.Http/src/System/Net/Http/HttpClient.cs#L562 -L566
рдЬрдм рдпрд╣ рдЕрдкрд╡рд╛рдж рдкрдХрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖-рдХреЗрд╕ рд░рджреНрджреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдпрд╣ рд░рджреНрджреАрдХрд░рдг рдХрд╛ рдХрд╛рд░рдг рдерд╛ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдирдпрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВред

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

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ HttpClient.Timeout рд╕рдВрдкрддреНрддрд┐ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ? рд╢рд╛рдпрдж рдпрд╣ "рдЕрдирдВрдд" рдкрд░ рд╕реЗрдЯ рд╣реИред рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реАрдзреЗ рдПрдЪрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ (GetAsync, SendAync рдЗрддреНрдпрд╛рджрд┐) рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ HttpClient.Timeout рд╕рдВрдкрддреНрддрд┐ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ?

рдореИрдВ рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЛ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ... рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдпрд╣реА рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдЧрд░ рдЗрд╕реЗ рдЕрдирдВрдд рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдХрд╛рд░рдг рдХрднреА рднреА рд░рджреНрджреАрдХрд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдкреЗрд╢рд▓-рдХреЗрд╕ рдЯрд╛рдЗрдордЖрдЙрдЯ == рдЕрдирдВрдд рд╣реИрдВ рдФрд░ рдЖрдЧреЗ рднреА рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ:
https://github.com/dotnet/corefx/blob/bdd33976fe3713cc3e78b83cf2a1176c70b793be/src/System.Net.Http/src/System/Net/Http/HttpClient.cs#L481

рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реАрдзреЗ рдПрдЪрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ (GetAsync, SendAync рдЗрддреНрдпрд╛рджрд┐) рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдЬреЛ рднреА рдЯреЛрдХрди рдкрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
https://github.com/dotnet/corefx/blob/bdd33976fe3713cc3e78b83cf2a1176c70b793be/src/System.Net.Http/src/System/Net/Http/HttpClient.cs#L485
рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо HttpClient.Timeout рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдХреЙрд▓рд░ рдПрдХ рдЯреЛрдХрди рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪреБрдирддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рдКрдкрд░ рд╣реИ: рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрд╣рдорд╛рд░рд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд░рджреНрджреАрдХрд░рдг рдЕрдиреБрд░реЛрдз рд╣реИред

рдЖрдкрддреНрддрд┐рдпрд╛рдВ?

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

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

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЬреНрдпрд╛рджрд╛рддрд░ред рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд╣реИ

catch(HttpTimeoutException)

рд╕реЗ

catch(OperationCanceledException ex) when (ex.InnerException is TimeoutException)

рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рд╣реЛред

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

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

рдЯреНрд░рд╛рдЗрдПрдЬ:

  • рд╣рдо рд▓реЙрдЧрд┐рдВрдЧ/рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде InnerException рдХреЗ TimeoutException рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд░рджреНрджреАрдХрд░рдг рдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЯреНрд░рд┐рдЧрд░рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред
  • рд╣рдо рдЙрди рддрд░реАрдХреЛрдВ рдкрд░ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд░рджреНрджреАрдХрд░рдг рдореЗрдВ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: TimeoutException рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдирд╛, рдЕрдирдВрдд Timeout рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде CancellationToken рдкрд╛рд╕ рдХрд░рдирд╛ рдЖрджрд┐ред

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

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

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЬреНрдпрд╛рджрд╛рддрд░ред рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд╣реИ

catch(HttpTimeoutException)

рд╕реЗ

catch(OperationCanceledException ex) when (ex.InnerException is TimeoutException)

рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рд╣реЛред

@scalablecory рдореИрдВ рдирд┐рд░рд╛рд╢ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рддрдХ рдЪрд░реНрдЪрд╛ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИ - рд╕рд╛рдорд╛рдиреНрдп рдПрд▓рдУрдмреА .NET рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдпрд╣ рд╣реИ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдЪрдЯреАрдкреАрдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдирд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭрдиреЗ/рдЕрдкрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЖрд╕рд╛рди рд╣реИ рдЖрдВрддрд░рд┐рдХ рдЕрдкрд╡рд╛рдж рдкрд░ рдЕрдкрд╡рд╛рдж рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВред рд╣рд░ рдХреЛрдИ рдпрд╣ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЕрдкрд╡рд╛рдж рдлрд╝рд┐рд▓реНрдЯрд░ рдХреНрдпрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд╣рд╛рдВ рдХреЛрдИ рднреА рд╕реНрдкрд╖реНрдЯ рдЬреАрдд/рдХреЛрдИ рд╕рдордЭреМрддрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ред

рд╣рдо рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рд╣рдордд рд╣реБрдП @ericsampson рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ @scalablecory рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рдВрдЧрддрддрд╛ рдХреНрд╖рддрд┐ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реБрдП рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рд╣реИред

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

рд╣рдо рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рд╣рдордд рд╣реБрдП @ericsampson рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ @scalablecory рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рдВрдЧрддрддрд╛ рдХреНрд╖рддрд┐ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реБрдП рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд░реИрдкрд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ - рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВрдиреЗ рд╕рдордЭрд╛ рд╣реИ - рдореБрджреНрджрд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рдХрд▓реНрдк рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд░реИрдкрд┐рдВрдЧ рдПрдХ рдЖрд╕рд╛рди рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ @stephentoub рдиреЗ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛, рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдирд╛ рдХреЛрд░рдПрдлрдПрдХреНрд╕ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

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

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

рдХреНрдпрд╛ рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ TaskCanceledException рдФрд░/рдпрд╛ OperationCanceledException (рджреЛрдиреЛрдВ рдареЛрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИрдВ) рдлреЗрдВрдХ рд╕рдХрддреА рд╣реИрдВ? рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ HttpRequestException рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬреЛ рдЧрд▓рдд рдФрд░ рднреНрд░рд╛рдордХ рд╣реИред

@qidydl рдпрд╣ рдпреЛрдЬрдирд╛ рд╣реИ ... рдЯрд╛рдЗрдордЖрдЙрдЯ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░реЗрдЧрд╛ред

рдзрдиреНрдпрд╡рд╛рдж @alnikola рдФрд░ @scalablecory рдФрд░ @davidsh рдФрд░ @karelz рдФрд░ рдЗрд╕ рдЪрд░реНрдЪрд╛/рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рд▓реЛрдЧ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред

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

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

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

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

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

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

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