2017-04-10 201 views
2

我在我的Xamarin應用程序中使用Refit庫,我想爲請求設置10秒超時。有什麼方法可以在改裝中做到這一點?如何在Refit庫中設置超時

接口:

interface IDevice 
{ 
    [Get("/app/device/{id}")] 
    Task<Device> GetDevice(string id, [Header("Authorization")] string authorization); 
} 

調用API

var device = RestService.For<IDevice>("http://localhost");    
var dev = await device.GetDevice("15e2a691-06df-4741-b26e-87e1eecc6bd7", "Bearer OAUTH_TOKEN"); 

回答

3

我終於找到設置超時用於改裝的請求的方式。我用CancelationToken。以下是添加CancelationToken

接口後,修改後的代碼:

interface IDevice 
{ 
    [Get("/app/device/{id}")] 
    Task<Device> GetDevice(string id, [Header("Authorization")] string authorization, CancellationToken cancellationToken); 
} 

調用API:

var device = RestService.For<IDevice>("http://localhost");  
CancellationTokenSource tokenSource = new CancellationTokenSource(); 
tokenSource.CancelAfter(10000); // 10000 ms 
CancellationToken token = tokenSource.Token;   
var dev = await device.GetDevice("15e2a691-06df-4741-b26e-87e1eecc6bd7", "Bearer OAUTH_TOKEN", token); 

它可以正常工作對我來說。我不知道這是否正確。如果它是錯誤的,請提出正確的方法。

3

接受的答案是強制執行單個請求超時的正確方法,但如果你想爲所有的請求一個一致的超時值,你可以通過一個預先配置HttpClientTimeout屬性設置:

var api = RestService.For<IDevice>(new HttpClient 
{ 
    BaseAddress = new Uri("http://localhost"), 
    Timeout = TimeSpan.FromSeconds(10) 
}); 

這是example project

+0

似乎無法與最新版本一起使用。 –

+0

它適合我。哪部分不起作用?以這種方式設置超時與Refit無關 - 它只是一個標準的'HttpClient'。 –

+0

@MarkFeldman在答案中添加了示例項目的鏈接。 –