Я работаю над приложением Cue Hue, я создаю собственные вызовы api для обучения. Поскольку Hue состоит из множества сетевых вызовов, я хотел также предоставить метод async для каждого метода синхронизации, который я создаю. Я написал несколько строк кода и подумал: «Это не может быть так просто», так что теперь я здесь и хотел спросить, является ли это хорошим способом реализации асинхронных функций? Также оцениваются любые другие оптимизации моего кода.Асинхронный код, который легко?
using System.IO;
using System.Net;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace SharpHue
{
public class HueUtilities
{
const string DISCOVERY_URI = "http://www.meethue.com/api/nupnp";
public struct DiscoveryElement
{
[JsonProperty("id")]
public string ID;
[JsonProperty("internalipaddress")]
public string Address;
}
public static DiscoveryElement[] DiscoverBridges()
{
string data = "[]";
var request = WebRequest.CreateHttp(DISCOVERY_URI);
try
{
var response = request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
data = streamReader.ReadToEnd();
streamReader.Close();
response.Close();
}
return JsonConvert.DeserializeObject<DiscoveryElement[]>(data);
}
catch (Exception ex)
{
throw ex;
}
}
public static async Task<DiscoveryElement[]> DiscoverBridgesAsync()
{
return await Task.Run(() => DiscoverBridges());
}
}
}
По существу, весь код ввода-вывода должен быть дублирован. Это является серьезной нагрузкой на производительность и обслуживание. Поэтому подумайте о том, нужны ли вызывающие/оба стиля. Вы также можете использовать sync over async, чтобы обеспечить удобные обертки для синхронизации с довольно небольшой начальной стоимостью. – usr