Xamarin рдиреЗ iOS рдФрд░ Android рдкрд░
C # 5 Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рд╣реИред .NET Async рдмреЗрд╕ рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛, Xamarin.iOS рдореЗрдВ 174 рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рддрд░реАрдХреЗ рджрд┐рдЦрд╛рдИ рджрд┐рдП рдФрд░ Xamarin.Android рдореЗрдВ 337ред
Xamarin рдореЛрдмрд╛рдЗрд▓ , рдЬреЛ рдПрдбреНрд░реЗрд╕ рдмреБрдХ, рдХреИрдорд░рд╛ рдФрд░ рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рдХреЛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рднреА рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╣реЛ рдЧрдпрд╛ рд╣реИред Async рдХреЗ рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдореЗрдВ
рдШрдЯрдХ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╛рджрд▓ рдмреИрдХреЗрдВрдб
рдкрд╛рд░реНрд╕ ред
рдЗрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ
рд╡реЗрдмрд┐рдирд╛рд░ рдХреЗ рдХреИрдЯ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдФрд░ рдЕрдиреБрд╡рд╛рдж рдХреЗ рддрд╣рддред

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

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЖрджреЗрд╢ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╣рдо рдлрд╝рдВрдХреНрд╢рди, рд▓реВрдк, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдХреЛрдб рдХреЗ рдЫреЛрдЯреЗ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреЛрдб рдХреЗ рдЕрдиреНрдп рдЫреЛрдЯреЗ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдореЗрдВ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рд╣реИ, рдореЗрд░рд╛ рд╕рд┐рд░ рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВред рдФрд░ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рддрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдореИрдВ рд╣рд╛рд░ рдорд╛рдирддрд╛ рд╣реВрдВред
рдПрджреНрдЬрд░ рджреАрдХреНрдЬрд╕реНрддреНрд░рд╕реНрдереИрддрд┐рдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдордп рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреА рд╣рдорд╛рд░реА рдХреНрд╖рдорддрд╛ рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдФрд░ рдЙрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЙрд╕рдХреЗ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЙрд╕рдХрд╛ рдорддрд▓рдм рдерд╛ GOTO рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╣рдордиреЗ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдкреНрд░рдЧрддрд┐ рдЕрднреА рднреА рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдирдП рдореБрд╣рд╛рд╡рд░реЗ, рдирдИ рднрд╛рд╖рд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╕рдВрдХрд▓рдХ рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВред рдФрд░ C # рдореЗрдВ async / wait рдирдпрд╛ рдореБрд╣рд╛рд╡рд░рд╛ рд╣реИ рдЬреЛ рдХреЙрд▓рдмреИрдХ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
async Task SnapAndPostAsync() { try { Busy = true; UpdateUIStatus ("Taking a picture"); var picker = new Xamarin.Media.MediaPicker (); var mFile = await picker.TakePhotoAsync (new Xamarin.Media.StoreCameraMediaOptions ()); var tagsCtrl = new GetTagsUIViewontroller (mFile.GetStream ());
рдпрд╣рд╛рдБ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣ рдХреЛрдб рд╕реБрд╕рдВрдЧрдд рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд▓рдЧрддрд╛ рд╣реИ, рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдФрд░ рдкреВрд░рд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди рд╣реЗрдбрд░ рдореЗрдВ async рд╢рдмреНрдж рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпреЗ рдХреАрд╡рд░реНрдб рд╕рдВрдХрд▓рдХ рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ: "рдХреГрдкрдпрд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдВ, рдЗрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ, рдЗрд╕реЗ рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдЙрдЯрдкреБрдЯ рд╕рдорд╛рди рдХреЙрд▓рдмреИрдХ, рд╕рдорд╛рди рд░рд╛рдЬреНрдп рдирд┐рдпрдВрддреНрд░рдг, рдХреЗрд╡рд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЖрдк рдХреЛрдб рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рджрд┐рдХреНрдЬрд╕реНрдЯреНрд░рд╛ рдХреЗ рдиреАрдЪреЗ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ
рдЯрд╛рд╕реНрдХ <T> рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ред рдпрд╣ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЯрд╛рд╕реНрдХ рдХрд╛рд░реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрддрд╛ рд╣реИ (рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдкреВрд░реНрдг, рд░рджреНрдж), рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рдгрд╛рдо рдФрд░ рдЕрдкрд╡рд╛рджред рдХрд╛рд░реНрдп рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ: рдорд╛рди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдФрд░ рдкреНрд░рдХрд╛рд░ T рдХрд╛ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ред

рдРрд╕реЗ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рд╣реИрдВ рдЬреЛ рдЖрдк рдЯрд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдХрд╛рд░реНрдп рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдпрд╛ рд╕рднреА рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдФрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рддред
рдЖрдк рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╕рд░реНрд╡рд░ рджрд░реНрдкрдгреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдХрд╛рд░реНрдп рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХрд╛рд░реНрдп рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рддреАрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рдкреВрд░рд╛ рд╣реЛрддреЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЙрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдЖрдЗрдП рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреА рд╣реИ, рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рд╕реНрдХ рдкрд░ рд╣реИ, рддреЛ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдЕрдЧрд░ рд╡рд╣ рдХрд╣рддрд╛ рд╣реИ "рд╣рд╛рдБ" - рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред
async Task DownloadFile (Uri uri, string target) { if (File.Exists (target)){ switch (await ShowAlert ("File Exists", "Do you want to overwrite the file?", "yes", "no")){ case 0: break; case 1: return; } } var stream = await Http.Get (uri); await stream.SaveTo(target); }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдореИрд╕реЗрдЬ рдХрд╛ рдирддреАрдЬрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИ, рдпрд╛рдиреА рдХрд┐ рдПрд╕рд┐рдВрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛, рд╣рдореЗрдВ рдПрдХ рдореИрд╕реЗрдЬ рдмрдирд╛рдирд╛ рдерд╛, рдЙрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдерд╛, рдХреЙрд▓рдмреИрдХ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдерд╛ред Async рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╡рд╣ рдЕрджреНрднреБрдд рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЬрд╝рд╛рдорд░реАрди рдХреЗ рдЕрдВрджрд░ рд╢реЛрдПрд░реНрдЯ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
public static Task<int> ShowAlert(string title, string message, params string [] buttons) { var tcs = new TaskCompletionSource<int> (); var alert = new UIAlertView { Title = title, Message = message }; foreach (var button in buttons) alert.AddButton (button); alert.Clicked += (s, e) => tcs.TrySetResult (e.ButtonIndex); alert.Show (); return tcs.Task; }
рдЕрдВрдд рд╕реЗ рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рд╡рд╣ рд╕реНрдерд╛рди рд╣реИ рдЬрд╣рд╛рдВ рдЬрд╛рджреВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдПрдХ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░реЗрд░рдгрд╛ рджреЗрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, Xamarin рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП Async .NET5 рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, Xamarin.iOS 174 рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ Xamarin.Android - 337. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
Xamarin рдореЛрдмрд╛рдЗрд▓ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдмрди рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдПрдбреНрд░реЗрд╕ рдмреБрдХ, рдХреИрдорд░рд╛ рдФрд░ рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рдХреЛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХрдИ
рдШрдЯрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рднреА рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдХреНрд▓рд╛рдЙрдб рдмреИрдХреЗрдВрдб
рдкрд╛рд░реНрд╕ ред
рдЕрдЧрд░ рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдореЗрдВ 50 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рд╡рд┐рдзрд┐ рдХреЗ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдпрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Async / рдЗрдВрддрдЬрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрдм Xamarin iOS рдФрд░ Android рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред(рд▓рдЧрднрдЧ рд▓реЗрди рдХреНрд░реЗрдЧ рдбрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЯрд╛рд╕реНрдХ-рдЖрдзрд╛рд░рд┐рдд рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреИрдЯрд░реНрди рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ )рдЖрдЗрдП рдмрдбрд╝реЗ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред
Github рдкрд░ рд╕рднреА рдХреЛрдб
рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред
рдиреЗрд╕реНрдЯреЗрдб рдХреЙрд▓рдмреИрдХ, рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ, рдпреВрдЖрдИ рд╕реНрдЯреНрд░реАрдо рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдЬрдм рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред Pfftред рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рдВрд╢реЛрдзрдиред
public void DownloadHomepage() { var webClient = new WebClient(); webClient.DownloadStringCompleted += (sender, e) => { if(e.Cancelled || e.Error != null) {
рд╕рдорд╛рди рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ:
public async Task<int> DownloadHomepageAsync() { try { var httpClient = new HttpClient(); Task<string> contentsTask = httpClient.GetStringAsync("http://xamarin.com"); string contents = await contentsTask; int length = contents.Length; ResultTextView.Text += "Downloaded the html and found out the length.\n\n"; byte[] imageBytes = await httpClient.GetByteArrayAsync("http://xamarin.com/images/about/team.jpg"); SaveBytesToFile(imageBytes, "team.jpg"); ResultTextView.Text += "Downloaded the image.\n"; DownloadedImageView.Image = UIImage.FromFile (localPath); ALAssetsLibrary library = new ALAssetsLibrary(); var dict = new NSDictionary(); var assetUrl = await library.WriteImageToSavedPhotosAlbumAsync (DownloadedImageView.Image.CGImage, dict); ResultTextView.Text += "Saved to album assetUrl = " + assetUrl + "\n"; ResultTextView.Text += "\n\n\n" + contents;
рдХреНрдпрд╛ рдЖрдкрдиреЗ рддреБрд▓рдирд╛ рдХреА рд╣реИ? рдирдпрд╛ рдХреЛрдб рд░реИрдЦрд┐рдХ рд╣реИ, рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдк Xamarin рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдПрдХ рдирдП рдПрдкреАрдЖрдИ рдСрдмреНрдЬреЗрдХреНрдЯ HttpClient рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдб рдореЗрдВ, рд╣рдо xamarin.com рд╣реЛрдо рдкреЗрдЬ рдХреЗ html рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред GetStringAsync рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдзрд╛рдЧрд╛ рддреБрд░рдВрдд рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕рд╛рдЗрдЯ рд╕реЗ HTML рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реМрдЯрддрд╛ рд╣реИ рдЯрд╛рд╕реНрдХ, рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХрд╛ рдПрдХ рд▓рд┐рдВрдХред рдЬрдм рд╣рдо рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдмрд┐рдирд╛ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬрдм рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рддреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░реЗрдВ, рд╣рдо рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдЬрдм рд╣рдо httpClient.GetByteArrayAsync рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдЯрд╛рд╕реНрдХ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдЕрдиреБрд░реЛрдз рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЫрд╡рд┐ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдПрдХ рдЕрдиреНрдп рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реЛрдЧрд╛ рдФрд░ рдЬрдм рдпрд╣ рдирд┐рдпрдВрддреНрд░рдг рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ рддреЛ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА, рд╣рдо рдЫрд╡рд┐ рдХреЛ рдмрдЪрд╛рдПрдВрдЧреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗред
рдХреЛрдб рд╕реБрд╕рдВрдЧрдд рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рдореИрдВрдиреЗ рдХреЛрдИ рднреА рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛрдб рдореЗрдВ рдпрд╛ HttpClient рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдереНрд░реЗрдб рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рд╣рдо рдЗрд╕реЗ рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рдХ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЖрдЗрдП рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:

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

Async рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢реВрдиреНрдп, рдХрд╛рд░реНрдп рдпрд╛ рдХрд╛рд░реНрдп <T> рд▓реМрдЯрд╛ рд╕рдХрддреА рд╣реИрдВред рд╢реВрдиреНрдп рдХреЗрд╡рд▓ рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреА рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИ, рддреЛ рдХрд╛рд░реНрдп <T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛, рдмрд╕ рдХрд╛рд░реНрдпред рдпрджрд┐ рдЖрдк рдЯрд╛рд╕реНрдХ <рдЯреА> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд┐рдзрд┐ рд╕реЗ рдорд╛рди рд▓реМрдЯрд╛рдПрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдмрд╛рдХреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
Await рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ async рдЪрд┐рд╣реНрдирд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрд╡рд╛ рдХреЛ рдХреИрдЪ рдФрд░ рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐
рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдВрджрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж рдХреЛ рдХрд╛рд░реНрдп рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдиреЛрдЯ: рд╢реВрдиреНрдп рдкрд░ рд▓реМрдЯрдиреЗ рд╡рд╛рд▓реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред try {
рдХрд╛рд░реНрдп рд░рджреНрдж рдХрд░реЗрдВ
рдПрдХ рд╕рдХреНрд░рд┐рдп рдХрд╛рд░реНрдп рдХреЛ рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рдХрд╛рд░реНрдпреЛрдВ рдЬреИрд╕реЗ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЖрдк рдХреЛрдб рд╕реЗ рдХрд╛рд░реНрдп рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмрд╣реБрдд рд▓рдВрдмреЗ рдСрдкрд░реЗрд╢рди рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдмрдирд╛рдП рдЧрдП рдЯреЛрдХрди рдХреЛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдХрд╛рд░реНрдп рд╕рдореВрд╣реЛрдВ рдХреЛ рд░рджреНрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
var cts = new CancellationTokenSource(); var intResult = await DownloadHomepageAsync(cts.Token);
рдкреНрд░рдЧрддрд┐ рдкреНрд░рджрд░реНрд╢рди
рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рди рдХреА рдкреНрд░рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдкрджреНрдзрддрд┐ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░реЗрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ IProgress рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
public class Progress<T> : IProgress<T> { public Progress; public Progress(Action<T> handler); protected virtual void OnReport(T value); public event EventHandler<T> ProgressChanged;
рдХрд╛рд░реНрдп рд╕рдВрдпреЛрдЬрди
Task.WhenAny рдФрд░
Task.WhenAll рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрди рд╕рднреА рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдпрд╛ рдЬрд╛рд░реА рди рд░рдЦрд╛ рдЬрд╛рдПред
while(tasks.Count > 0) {
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рд╕рд╛рдЗрдЯ рд╕реЗ рддреАрди рддрд╕реНрд╡реАрд░реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдХрд╛рд░рдг 403 рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП, рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд╛рд░реНрдп рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реЛрдиреЗ рддрдХ рдЙрдиреНрд╣реЗрдВ рд▓реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВред рд╣рдо Task.WhenAny рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдордЧреНрд░ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рддрдм рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдХреЛрдИ рднреА рдиреЗрд╕реНрдЯреЗрдб рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рд╣рдореЗрдВ t рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВред рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЛ рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдХрд╛рд░реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдЯреА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред T рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрд╡рд╛рдж рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреЙрдк рдЕрдк рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ, рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
Microsoft рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ C # async рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ , Xamarin рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ iOS рдФрд░ Android API рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред рд╡реЗрдмрд┐рдирд╛рд░ рдХреЗ рд▓рд┐рдП рднрдВрдбрд╛рд░ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рд╣рдорд╛рд░реЗ рд╣рдмреНрд░-рдмреНрд▓реЙрдЧ (рдКрдкрд░реА рджрд╛рдПрдВ рдмрдЯрди) рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред рд╣рд░ рдЧреБрд░реБрд╡рд╛рд░, рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕, рд╡рд┐рдкрдгрди рдФрд░ рдореЛрдмрд╛рдЗрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд▓реЗрдЦред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ (12 рд╕рд┐рддрдВрдмрд░) "рдореЛрдмрд╛рдЗрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдмрд┐рдХреНрд░реА рдХреИрд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ": рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ, рд░рд┐рдкреЛрд░реНрдЯ, рдПрдХ рдореЗрдЧрд╛рдкреНрд▓рд╛рди, рдПрдХ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рд╕реАрдЖрд░рдПрдо рдФрд░ рдЗрд╕рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╡рд┐рдХреНрд░реЗрддрд╛ рдХрд╛ рдмрдпрд╛рдиред