Próbuję opóźnić przetwarzanie metody (SubmitQuery() w przykładzie) wywoływanej z zdarzenia klawiatury w WinRT, dopóki nie będzie żadnych dalszych zdarzeń dla czas (w tym przypadku 500 ms).TaskCanceledException podczas wywoływania Task.Delay z odwołaniemTokenem w zdarzeniu klawiatury
Chcę, aby funkcja SubmitQuery() działała tylko wtedy, gdy wydaje mi się, że użytkownik zakończył pisanie.
Korzystając z poniższego kodu, otrzymuję wywołanie System.Threading.Tasks.TaskCanceledException, gdy Task.Delay (500, cancellationToken.Token); jest nazywany. Co ja tu robię źle, proszę?
CancellationTokenSource cancellationToken = new CancellationTokenSource();
private async void SearchBox_QueryChanged(SearchBox sender, SearchBoxQueryChangedEventArgs args)
{
cancellationToken.Cancel();
cancellationToken = new CancellationTokenSource();
await Task.Delay(500, cancellationToken.Token);
if (!cancellationToken.IsCancellationRequested)
{
await ViewModel.SubmitQuery();
}
}
mógłby Pan podać odnośnik do niektórych zasobów, jak Rx jest lepsze dopasowanie do czasu oparte logika – Anupam
@Anupam: To z własnego doświadczenia. –