Это вопрос до this question.Как отменить асинхронный запрос в правильном направлении
Я пытаюсь загрузить данные из моей базы данных, которые занимают 5-10 секунд, но я хочу, чтобы графический интерфейс оставался отзывчивым, а также он должен быть отменен.
private CancellationTokenSource _source;
public IEnumerable<Measurement> Measurements { get { ... } set { ... } }
private async void LoadData()
{
_source = new CancellationTokenSource();
using (var context = new TraceContext())
{
Measurements = null;
Measurements = await context.Measurements.ToListAsync(_source.Token);
}
}
private void Cancel()
{
if (_source != null)
_source.Cancel();
}
public RelayCommand ReloadCommand
{
get { return _reloadCommand ?? (_reloadCommand = new RelayCommand(Reload)); }
}
private RelayCommand _reloadCommand;
public RelayCommand CancelCommand
{
get { return _cancelCommand ?? (_cancelCommand = new RelayCommand(Cancel)); }
}
private RelayCommand _cancelCommand;
Я попробовал несколько вещей, но я просто не могу получить эту работу должным образом, это просто загружает список и то все, что я не могу отменить это.
Где ошибка?
Когда вы говорите «Я не могу отменить это», что на самом деле происходит, когда вы говорите «CancellationTokenSource» отменить? –
Nothings случается, поскольку у меня есть концепция, стоящая за этим, она должна генерировать исключение, если еще есть задача, выполняемая с этим токеном, но этого не происходит. – Staeff
Что такое 'ToListAsync'? Из небольшого количества поисковых запросов я не могу найти его в составе MSDN или что-то в этом роде. Может быть, вы написали его, и он содержит ошибку, так что токен не применяется правильно? –