私はC#Hueアプリケーションで作業しています。私はAPIを作成して学習体験のために自分自身を呼び出しています。色相は多くのネットワークコールから構成されているので、私は作成したすべての同期メソッドに対して非同期メソッドも提供したいと考えていました。私はコードのいくつかの行を書いて、自分自身に "これはおそらくとても簡単なことではない"と思ったので、今ここにいるので、これが非同期関数を実装する良い方法であるかどうか尋ねたいと思っていましたか?また、私のコードに他の最適化をいただければ幸いです。非同期コードは簡単ですか?
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