Рассмотрим асинхронную операцию, например получение результатов поиска из хранилища данных.Теперь я хочу, чтобы можно было отменить текущую операцию поиска, чтобы начать новую, которая фактически заменяет активный поиск, главным образом потому, что параметры поиска тем временем изменились.
Мой поиск начинается через TPL(.NET 4.0) новая задача и в конечном итоге имеет Continues и, конечно, имеет обратные вызовы, которые вызывают UI-методы в UI-Context.
Итак, если кнопка поиска нажимается снова, пока выполняется поиск, яВо-первых, нужно остановить текущее задание и дождаться его завершения.Если я сделаю это из потока пользовательского интерфейса, я могу зайти в тупик, поскольку Wait () в потоке пользовательского интерфейса блокирует его, поэтому возможный Invoke () никогда не будет выполнен.
Поэтому в моем текущем решении я запускаюотдельная задача, которая ожидает запуска / завершения задач, а затем запускает новые.Это кажется немного громоздким и громоздким, и мне интересно, неужели нет более элегантного способа, так как мне часто нужен такой механизм.
Так что, может быть, мне не хватает механизма инфраструктуры, который можно использовать для такого родасценарий?Или что было бы более рекомендуемым способом?