Я начинаю несколько тестов об асинхронной программировании в .net, и теперь я застреваю при попытке отменить длительную операцию с помощью cancelationToken.Асинхронное отключение во время работы
Поэтому у меня есть следующий код:
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() метод? Можно ли это сделать?
Используйте 'Task.Run' вместо' StartNew' для 'async' кода; [Я объясняю, почему в моем блоге] (http://blog.stephencleary.com/2013/08/startnew-is-dangerous.html). –
Task.Run не существует в .net 4 – mmarques
В 'Microsoft.Bcl.Async' это' TaskEx.Run'. –