Могу ли я запустить функцию действия Seq.iter асинхронно - PullRequest
3 голосов
/ 02 апреля 2011

Итак, название описывает все это.

Seq.iter (fun item -> (*do something*)) sequence

Можно ли запустить все эти лямбда-функции параллельно?Это может быть полезно, когда эта функция выполняет большую работу.

Ответы [ 3 ]

6 голосов
/ 02 апреля 2011

Конечно, если вы нацеливаетесь на .NET 3.5 +, то

  1. Загрузите F # PowerPack
  2. Добавьте ссылку на FSharp.PowerPack.Parallel.Seq
  3. открыть Microsoft.FSharp.Collections
  4. Удалить код с помощью модуля PSeq, например {1..100} |> PSeq.iter (printfn "%A")

Если вы ориентируетесь на .NET 2.0, следуйте моим инструкциям здесь для компиляции версии System.Linq.ParallelEnumerable с обратным портированием из проекта Rx в проект PowerPack Parallel.Seq.

1 голос
/ 02 апреля 2011

Если вы хотите запустить функцию параллельно, просто используйте функцию Parallel.ForEach

Parallel.ForEach(sequence, fun item -> (* do something *))

Это отлично работает с F #

0 голосов
/ 02 апреля 2011

Вы можете использовать Parallel.ForEach.Seq.iter не должен использоваться для этого puropse.Наблюдайте, что

Seq.iter (fun n -> printfn "%i" (nth_prime_number n)) { 10 .. 1 }

Ожидается

29
23
19
17
13
11
7
5
3
2

Вы получаете что-нибудь.Например

29
19
23
11
17
13
7
3
2
5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...