2016-09-23 17 views
0

我在代碼中調用了異步函數,該函數調用rest服務並填充數據結構。但不知何故,我需要在完成之前取消該功能,我如何實現這一點。如何在xamarin表單中取消正在運行的異步函數

getAdDetails(ad.id,ad.campaign_type); 

private async void getAdDetails(int campaign_id, string campaign_type) { 
// some code here 
} 

回答

0

有一種叫做「CancelationToken」的東西應該是這樣的東西。 另一種方法是在想要取消過程時拋出異常。 另一種方法是通過一個可以命名爲「ShouldExecute」的標誌以及您繼續監控它的方法。

我也傾向於忽略來自該方法的結果,當它們不需要時,讓線程和平執行,但在返回時忽略它。

0

假設你有一些背景的邏輯在你的函數:

CancellationTokenSource _cancellation; 


    public void SomeFunctionToStartDataRefresh(){ 
     _cancellation = new CancellationTokenSource(); 

    try{ 
     getAdDetails(id, type, cancellation.Token); 
    }catch(OperationCanceledException ex){ 
     //Operation is cancelled 
    } 
    } 


    private async Task getAdDetails(ad.id,ad.campaign_type); 

     private async void getAdDetails(int campaign_id, string campaign_type, CancellationToken token) { 

     var data = await fetchDatafromServer() 
     token.ThrowIfCancellationRequested(); 
     await DosomethingWithData(); 
     token.ThrowIfCancellationRequested(); 
     await DoSomethingElseWithData(); 
    } 
相關問題