Как запланировать условный ContinueWith

У меня есть GUI на кучу LINQ запросов. Выполнение запросов занимает некоторое время, поэтому я хотел бы, чтобы GUI был отзывчивым и показывал индикаторы занятости и прогресс-бары. Многие из запросов проверяют наличие определенных условий в данных. Если запрос возвращает пустой результат, приложение продолжает выполнение следующего запроса. Если запрос возвращает результат, то набор возвращаемых данных будет иметь степень серьезности "предупреждения" или "ошибки". Если это предупреждения, выполнение должно быть продолжено. Если это ошибки, то выполнение прекращается.

Большая часть кода играет в "пинг-понг" с пулом потоков и GUI. Квазикод:

TaskFactory.StartNew(()=>
    {
       Run in background
    }.ContinueInGui(()=>
    {
       Update something
    }).ContinueInBackground(()=>
    {
      Do more work;
    }).ContinueInGui(()=> etc etc

Это аккуратно и красиво. Однако я не вижу, как я могу вставить условия, чтобы идти разными путями продолжения или прервать цепочку продолжения, если в данных обнаружены ошибки.

Нет метода для ContinueWithIf( predicate ,delegate{},TaskScheduler). Использую ли я TaskCancellation, бросаю ли я исключение? Или есть какой-то простой механизм ветвления, о котором я не думаю?

11
задан Tormod 24 October 2011 в 08:17
поделиться