您好我需要在C#中编写一个正确的异步Web请求函数来获取JSON格式的一些数据并在强类型对象中反序列化它。我提出了这个解决方案:
public async Task<TReturnType> MakeAsyncRequest<TReturnType>(string url) where TReturnType : class
{
try
{
var request = (HttpWebRequest)WebRequest.Create(url);
var response = await request.GetResponseAsync();
var json = await Task.Run(() => ReadStreamFromResponse(response));
var deserializedObject = await Task.Run(() => JsonConvert.DeserializeObject<TReturnType>(json));
return deserializedObject;
}
catch (Exception)
{
// TODO: Handle exception here
throw;
}
}
private string ReadStreamFromResponse(WebResponse response)
{
using (var responseStream = response.GetResponseStream())
using (var sr = new StreamReader(responseStream))
{
return sr.ReadToEnd();
}
}
使用方式如下:
var myData = await MakeAsyncRequest<IEnumerable<SomeObject>>(http://example.com/api/?getdata=all);
我面临的问题是,有时我的网络请求会触发并且永远不会返回,是否有正确的方法来处理它?也许玩定时器是一种选择,但我不喜欢去那里。
如果你能改进我的功能,也许我会感激不尽,也许有更好的方法来做事,而我却看不到它。