我正在研究C#Hue應用程序,我正在創建api調用自己的學習體驗。由於Hue由很多網絡調用組成,我想爲每個創建的同步方法提供一個異步方法。我寫了一些代碼行,並認爲「這不可能是那麼容易」,所以現在我在這裏,想問問這是否是實現異步函數的好方法?還有我的代碼的任何其他優化表示讚賞。異步代碼很容易嗎?
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());
}
}
}
基本上,所有的IO代碼都必須重複。這對生產力和維護造成了嚴重的負擔。所以想想來電者是否需要/想要這兩種風格。您也可以使用異步同步來以相當小的性價比提供同步便利包裝。 – usr