1

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

我发现它HttpMixin.MakeWebRequest()有一个超时参数(默认值=null)但从DownloadUrl()不使用它,所以前面提到的函数总是等待长达 15 秒:

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

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

感谢您考虑有用的回复。

4

1 回答 1

1

所以在查看签名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); });

于 2017-05-02T14:36:01.790 回答