我在代碼中調用了異步函數,該函數調用rest服務並填充數據結構。但不知何故,我需要在完成之前取消該功能,我如何實現這一點。如何在xamarin表單中取消正在運行的異步函數
getAdDetails(ad.id,ad.campaign_type);
private async void getAdDetails(int campaign_id, string campaign_type) {
// some code here
}
我在代碼中調用了異步函數,該函數調用rest服務並填充數據結構。但不知何故,我需要在完成之前取消該功能,我如何實現這一點。如何在xamarin表單中取消正在運行的異步函數
getAdDetails(ad.id,ad.campaign_type);
private async void getAdDetails(int campaign_id, string campaign_type) {
// some code here
}
有一種叫做「CancelationToken」的東西應該是這樣的東西。 另一種方法是在想要取消過程時拋出異常。 另一種方法是通過一個可以命名爲「ShouldExecute」的標誌以及您繼續監控它的方法。
我也傾向於忽略來自該方法的結果,當它們不需要時,讓線程和平執行,但在返回時忽略它。
假設你有一些背景的邏輯在你的函數:
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();
}