我正在开发一个针对移动设备的应用程序,所以我必须考虑糟糕的网络连接。在一个用例中,我需要减少请求的超时,因为如果没有可用的网络,那没关系,我会立即回退到默认数据 ,< em>没有用户等待HTTP响应。
我发现HttpMixin.MakeWebRequest()
有一个超时参数(默认= null)但DownloadUrl()
从不使用它,所以上述功能总是等待最多15秒:
request.Timeout(timeout ?? TimeSpan.FromSeconds(15),
BlobCache.TaskpoolScheduler).Retry(retries);
所以实际上我没有选择使用不同的超时,或者我错过了什么?
感谢您考虑提供有用的回复。
答案 0 :(得分:0)
在查看
中DownloadUrl
的签名后
我看到了你在说什么,并且不确定它为什么会存在但是,看起来超时与构建请求有关,而不是请求本身的超时。
话虽这么说,为了通过下载设置超时,你有几个应该可行的选项。
var timeout = 1000;
var task = BlobCache.LocalMachine.DownloadUrl("http://stackoverflow.com").FirstAsync().ToTask();
if (await Task.WhenAny(task, Task.Delay(timeout)) == task) {
// task completed within timeout
//Do Stuff with your byte data here
//var result = task.Result;
} else {
// timeout logic
}
var obs = BlobCache.LocalMachine
.DownloadUrl("http://stackoverflow.com")
.Timeout(TimeSpan.FromSeconds(5))
.Retry(retryCount: 2);
var result = obs.Subscribe((byteData) =>
{
//Do Stuff with your byte data here
Debug.WriteLine("Byte Data Length " + byteData.Length);
}, (ex) => {
Debug.WriteLine("Handle your exceptions here." + ex.Message);
});