Асинхронный барьер в F #

Я написал программу на F #, которая асинхронно перечисляет все каталоги на диске. Задача async перечисляет все файлы в данном каталоге и создает отдельные задачи async (демоны: я запускаю их с помощью Async.Start) для перечисления подкаталогов. Все они передают результаты центральному процессору почтовых ящиков.

Моя проблема в том, как мне определить, что все задачи демона завершены и больше не будет поступать файлов. По сути, мне нужен барьер для всех задач, которые (прямые и косвенные) являются дочерними для моей главной задачи. Я не мог найти ничего подобного в асинхронной модели F #.

Вместо этого я создал отдельный MailboxProcessor, в котором я регистрирую начало и завершение каждой задачи. Когда активный счет обнулится, все готово. Но я не доволен этим решением. Есть ли другие предложения?

5
задан Bartosz Milewski 5 January 2011 в 20:28
поделиться