我正在使用異步方法。如何在Timer引發超時事件時停止執行?如何停止c#中的異步方法執行?
我的代碼:
public async Task<object> Method()
{
cts = new CancellationTokenSource();
try
{
timer = new System.Timers.Timer(3000);
timer.Start();
timer.Elapsed += (sender, e) =>
{
try
{
timer_Elapsed(sender, e, cts.Token, thread);
}
catch (OperationCanceledException)
{
return;
}
catch (Exception ex)
{
return;
}
};
await methodAsync(cts.Token);
return "message";
}
catch (OperationCanceledException)
{
return "cancelled";
}
catch (Exception ex)
{
return ex.Message;
}
}
// Async Call
public async Task<object> methodAsync(CancellationToken ct)
{
try
{
pdfDocument = htmlConverter.Convert("path", "");
}
catch(Exception ex)
{
return x.Message;
}
}
// Timer event
void timer_Elapsed(object sender, ElapsedEventArgs e, CancellationToken ct)
{
cts.Cancel();
ct.ThrowIfCancellationRequested();
}
您似乎試圖取消代碼'htmlConverter.Convert(「path」,「」)''。無法取消此代碼,因爲取消代碼必須能夠響應取消令牌。所以唯一的答案是,如果你需要取消,你需要啓動一個新的進程並殺死它。否則唯一安全的行爲是讓這段代碼運行完成。 – Enigmativity
我不想取消這個'pdfDocument = htmlConverter.Convert(「path」,「」);'code。 只要嘗試殺死methodAsync()函數。 有什麼辦法嗎? –
'methodAsync'函數中唯一發生的事情就是調用'.Convert',所以停止一個和停止另一個是一樣的。您無法安全地強制任務/線程取消。您必須能夠響應取消令牌才能正常工作。 – Enigmativity