8 (495) 215-53-16

info@notissimus.com

ул. Заозерная, 8

196084, Санкт-Петербург

09:00 - 20:00

сб.,вс. - выходные

c# async generic get method или универсальный асинхронный Get метод, который мы используем при разработке мобильных приложений

 Блог    

Каждый разработчик мобильных приложений сталкивается с асинхронной загрузкой данных с внешнего API.

Так как мы ведем разработку для всех платформ(iOS, Android, WinPhone) на c#, то мы написали единый метод для асинхронной загрузки данных. Этот метод работает на всех платформах и использует конструкцию async/await, что позволяет существенно сократить количество строк кода при программировании асинхронных методов. 

Так как в нашем случае API возвращает json строку, то в своем методе мы используем generic конструкцию, что позволяет десериализовать ответ в нужный класс.

Ниже представлен исходный код метода с комментариями:

public static class WebServiceAsync
	{
       //url - http ссылка метода API
		public static async Task< T > Get(string url)
		{
			if (string.IsNullOrEmpty(url))
			{
				throw new NullReferenceException("Url is null.");
			}

			using (HttpClientHandler handler = new HttpClientHandler())
			{
			    //Включаем декомпрессию при необходимости
				if (handler.SupportsAutomaticDecompression)
				{
					handler.AutomaticDecompression = DecompressionMethods.Deflate;
				}
				using (HttpClient httpClient = new HttpClient(handler))
				{
					string data = await httpClient.GetStringAsync(url).ConfigureAwait(false);

					if (!string.IsNullOrEmpty(data))
					{
					   //Десериализум ответ в класс с использованием библиотеки Json.NET
						return JsonConvert.DeserializeObject< T >(data);
					}
					return default(T);
				}
			}
		}
}
]]>