Я видел аналогичный вопрос, заданный here, но это не кажется правильным для моего сценария.Отменить выполнение и выполнить повторную запись при повторном вводе метода
У нас есть пользовательский интерфейс, который может выполнить запрос, и если пользователь хочет выполнить запрос еще раз (с другим параметром запроса), мы хотим отказаться от первоначального запроса, проигнорировать его ответ и использовать только последний запрос ответов.
На данный момент у меня есть:
private readonly IDataService _dataService;
private readonly MainViewModel _mainViewModel;
private CancellationTokenSource _cancellationTokenSource;
//Constructor omitted for brevity
public async void Execute()
{
if (_cancellationTokenSource != null)
{
_cancellationTokenSource.Cancel();
}
_cancellationTokenSource = new CancellationTokenSource();
try
{
string dataItem = await _dataService.GetDataAsync(_mainViewModel.Request, _cancellationTokenSource.Token);
_mainViewModel.Data.Add(dataItem);
}
catch (TaskCanceledException)
{
//Tidy up ** area of concern **
}
}
Это, кажется, хорошо функционировать и у меня есть хороший и отзывчивый интерфейс, но у меня есть сценарий, который касается меня:
- Запрос производится пользователь
- Пользователь делает новый запрос, который отменяет исходный запрос
- Новый запрос возвращается до того, как первоначальный аннулированный запрос вызывает его исключение populati нг пользовательского интерфейса с необходимыми в настоящее время данных
- Исключение отбрасывается и очистка происходит перезапись новых запросов выхода
Это может быть очень редким, но я могу видеть это как возможность, если мое понимание этого не случилось ,
Есть ли способ гарантировать, что если задача отменена с помощью запроса маркера отмены и запускается новая задача, то аннулирование происходит до того, как будет запущена или запущена новая задача, не блокируя поток пользовательского интерфейса?
Любое чтение, чтобы расширить мое понимание об этом, было бы очень признательно.
Почему приведение в порядок перезаписывает результаты? Очистить результаты до вызова. – Paparazzi