The best way to support cancellation is to pass a CancellationToken
to the async
method. The button press can then be tied to cancelling the token
class TheClass
{
CancellationTokenSource m_source;
void StartThread() {
m_source = new CancellationTokenSource;
StartThread(m_source.Token);
}
private async void StartThread(CancellationToken token) {
...
}
private void OnCancelClicked(object sender, EventArgs e) {
m_source.Cancel();
}
}
This isn't quite enough though. Both the startThread
and StartProcess
methods will need to be updated to cooperatively cancel the task once the CancellationToken
registers as cancelled