我正在.net 中开始一些关于异步编程的测试,现在我被困在尝试使用cancellationToken 取消长时间操作。
所以我有以下代码:
CancellationTokenSource cancelationToken = new CancellationTokenSource();
我的按钮开始操作
private void button2_Click(object sender, EventArgs e)
{
cancelationToken.Cancel(true);
}
private void button1_Click(object sender, EventArgs e)
{
StartOperation(cancelationToken.Token);
}
最后是我的操作
private async void StartOperation(CancellationToken cancelToken)
{
await GetItensFromDatabase2(cancelToken);
}
public static Task<int> GetItensFromDatabase(CancellationToken cancelToken)
{
//cancelToken.Register( () => Console.WriteLine("Canceled") );
return Task.Factory.StartNew<int>(() =>
{
int result = 0;
cancelToken.ThrowIfCancellationRequested();
result = MyLongOperation(); // Simulates my operation -> I want to cancel while this operation is still running
return result;
}, cancelToken);
}
那么,如何取消 MyLongOperation() 方法?有可能吗?