|
|
@ -22,12 +22,12 @@ namespace CancelTask |
|
|
|
|
|
|
|
|
|
|
|
private void runButton_Click(object sender, EventArgs e) |
|
|
|
private void runButton_Click(object sender, EventArgs e) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
Run(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void cancelButton_Click(object sender, EventArgs e) |
|
|
|
private void cancelButton_Click(object sender, EventArgs e) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
cancelTokenSource.Cancel(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private async void Run() |
|
|
|
private async void Run() |
|
|
@ -35,14 +35,28 @@ namespace CancelTask |
|
|
|
cancelTokenSource = new CancellationTokenSource(); |
|
|
|
cancelTokenSource = new CancellationTokenSource(); |
|
|
|
CancellationToken token = cancelTokenSource.Token; |
|
|
|
CancellationToken token = cancelTokenSource.Token; |
|
|
|
|
|
|
|
|
|
|
|
Task task1 = Task.Factory.StartNew<object>(LongCalcAsync, token); |
|
|
|
Task<object> task1 = Task.Factory.StartNew<object>(LongCalcAsync, token); |
|
|
|
|
|
|
|
|
|
|
|
dynamic res = await Task; |
|
|
|
dynamic res = await task1; |
|
|
|
|
|
|
|
if (res != null) |
|
|
|
|
|
|
|
progressText.Text = $"Sum: {res.Sum}"; |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
progressText.Text = "Canceled"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private object LongCalcAsync() |
|
|
|
private object LongCalcAsync() |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
int sum = 0; |
|
|
|
|
|
|
|
for (int i = 0; i < 100; i++) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (cancelTokenSource.Token.IsCancellationRequested) |
|
|
|
|
|
|
|
return null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sum += i; |
|
|
|
|
|
|
|
Thread.Sleep(1000); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return new { Sum = sum }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|