我在Silverlight应用程序中使用WebClient来访问REST服务。它是一个未知数量的异步调用。 很酷的是,您可以订购您的请求和回复!回复与他们的要求相匹配!这是必要的,因为您不知道响应将以何种顺序返回。
但是如何通过WebClient为我的通话获得“超时”?比方说15秒 我想通过委托/ lambda坚持使用WebClient / this代码。我知道WebRequest类有一个超时属性,但我不确定是否可以用WebRequest替换WebClient但保留其功能。
int maxRequests = list_S.Count;
// amount of URI
foreach (string item in list_S)
{
bool isValid = Uri.IsWellFormedUriString(item, UriKind.Absolute);
Uri uriTest;
if(isValid) //if it is valid Uri, send request
{
WebClient wc = new WebClient();
wc.DownloadStringCompleted += (s, args) =>
{
if (args.Error == null)
{
dict.Add((int)args.UserState, args.Result);
}
//here you test if it is the last request... if it is, you can
//order the list and use it as you want
if (dict.Count == maxRequests)
{
var orderedResults = dict.OrderBy(a => a.Key);
}
closeTabitem_SensorSource();
};
wc.DownloadStringAsync(new Uri(item), i++);
}
else
{
MessageBox.Show("Uri FAIL!: " + item);
}
}
答案 0 :(得分:3)
WebRequest
也没有提供管理请求超时的方法。
您需要采取的方法是将WebClient
与您自己的代码结合使用DispatcherTimer
,并调用WebClient
CancelAsync
方法。