我在我的代码中调用了异步函数,它调用了rest服务并填充了一个数据结构。但不知怎的,我需要在完成之前取消该功能,我该如何实现这一目标。
getAdDetails(ad.id,ad.campaign_type);
private async void getAdDetails(int campaign_id, string campaign_type) {
// some code here
}
答案 0 :(得分:0)
有一种叫做“CancelationToken”的东西应该用于这种东西。 另一种方法是在想要取消进程时抛出异常。 另一种方法是使用一个可以命名为“ShouldExecute”的标志,并在方法中继续监视它。
我也倾向于忽略不需要时从方法中得到的结果,让线程在和平中执行,但在它返回时却被忽略。
答案 1 :(得分: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();
}