如何在Akavache中为DownloadURL()指定HTTP超时?

时间:2017-05-02 10:02:52

标签: akavache

我正在开发一个针对移动设备的应用程序,所以我必须考虑糟糕的网络连接。在一个用例中,我需要减少请求的超时,因为如果没有可用的网络,那没关系,我会立即回退到默认数据 ,< em>没有用户等待HTTP响应。

我发现HttpMixin.MakeWebRequest()有一个超时参数(默认= null)但DownloadUrl()从不使用它,所以上述功能总是等待最多15秒:

request.Timeout(timeout ?? TimeSpan.FromSeconds(15), BlobCache.TaskpoolScheduler).Retry(retries);

所以实际上我没有选择使用不同的超时,或者我错过了什么?

感谢您考虑提供有用的回复。

1 个答案:

答案 0 :(得分:0)

在查看

DownloadUrl的签名后

HttpMixin.cs

我看到了你在说什么,并且不确定它为什么会存在但是,看起来超时与构建请求有关,而不是请求本身的超时。

话虽这么说,为了通过下载设置超时,你有几个应该可行的选项。

通过TPL aka Async Await

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 }

通过Rx Observables

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); });