рд╕реА # рдореЗрдВ Async

рдЬрд╛рд░реА рд▓рд┐рдВрдХ: рднрд╛рдЧ II рдФрд░ рднрд╛рдЧ III ред



PDC2010 рдореЗрдВ, Heisberg рдиреЗ рдШреЛрд╖рдгрд╛ рдХреА рдХрд┐ C # рдХреЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдЖрджрд┐рдордпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдШреЛрд╖рдгрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдЯреВрдбрд┐рдпреЛ ( рдбрд╛рдЙрдирд▓реЛрдб ) рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ CTP рд╕рдВрд╕реНрдХрд░рдг рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



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



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



рдЗрд╕рд▓рд┐рдП рдПрд╕рд┐рдВрдХреНрд╕!



рднрд╡рд┐рд╖реНрдп C # рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рддреАрди рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ: рдЯрд╛рд╕реНрдХ рдФрд░ рдЯрд╛рд╕реНрдХ <T> рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдСрдкрд░реЗрдЯрд░, рдФрд░ Async рдорд╛рд░реНрдХрд░ред



рдЯрд╛рд╕реНрдХ рдФрд░ рдЯрд╛рд╕реНрдХ <T>


рдпреЗ рдкреНрд░рдХрд╛рд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЧрдгрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рднреАред рдЖрдк рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рджреГрд╢реНрдп рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп <T> рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:



public class Task<TResult> : Task { public TResult Result { get; internal set; } public Task<TNewResult> ContinueWith<TNewResult>( Func<Task<TResult>, TNewResult> continuationFunction ); }
      
      





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



рдПрдХ рдЕрдиреНрдп рдХреНрд░рд┐рдпрд╛ рдЬреЛ рд╣рдо рдкреНрд░рдХрд╛рд░ рдЯрд╛рд╕реНрдХ <рдЯреА> рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рд╣реА рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрдИ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░, рд╣рдореЗрдВ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдорд┐рд▓рддрд╛ рд╣реИред



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



Async рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛рд░рдд


рдПрдХ рдЯреЛрдХрди рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╛ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рдзрд┐ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:



 public async Task<string> DownloadStringTaskSlowNetworkAsync(Uri address) {
      
      





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



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



рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдХреЛ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рджрд┐рдЦрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреЗрдЬ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ:



 class Program { static async Task SavePage(string file, string a) { using (var stream = File.AppendText(file)) { var html = await new WebClient().DownloadStringTaskAsync(a); stream.Write(html); } } static void Main(string[] args) { var task = SavePage("habrahabr", "http://habrahabr.ru"); task.Wait(); } }
      
      





Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:



 static Task SavePage(string file, string a) { var stream = File.AppendText(file); return new WebClient().DownloadStringTaskAsync(a).ContinueWith(delegate(Task<string> data) { try { stream.Write(data.Result); } finally { stream.Dispose(); } }); }
      
      





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



 static async Task SavePage(string file, string a) { using (var stream = File.AppendText(file)) { var html = await new WebClient().DownloadStringTaskAsync(a); await stream.WriteAsync(html); } }
      
      





рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рд░рд╣рддрд╛ рд╣реИ


рдореИрдВрдиреЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдЯреВрд▓реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛ (Task.WaitOne, Task.WaitAll), рд╕рд╛рде рд╣реА рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ (System.Threading.Tasks.Dataflow) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдСрдкрд░реЗрд╢рди рдХреА рдкреНрд░рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАред рд▓реЗрдХрд┐рди рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд░рд┐рд▓реАрдЬ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдкреВрд░реА рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрдк рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдбрд╛рдЗрдирд┐рдВрдЧрдлреНрд▓рд┐рдлрд╝реЛрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд░реЛрдз рд╣реИ, рдЖрдкрдХреЛ рдХрд╛рд░рдг рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ =)



All Articles