Существует ли пул потоков для Silverlight с максимальным количеством потоков? - PullRequest
1 голос
/ 24 февраля 2011

Я создал рендер в Silverlight / C #. В настоящее время я использую System.Threading.ThreadPool, чтобы планировать рендеринг плиток параллельно. Сейчас это хорошо работает, но я бы хотел ограничить количество используемых потоков.

Поскольку это работает на Silverlight, есть несколько ограничений:

Я вижу несколько вариантов:

  • Найти пул потоков OSS / третьей стороны
  • Реализация собственного пула потоков (я бы не хотел)
  • Используйте Rx (что я делаю в других местах)

Существуют ли какие-либо альтернативные пулы потоков, которые работают с Silverlight?

Или кто-нибудь может придумать выражение Rx, которое порождает ограниченное количество потоков и работает с ними в очереди?

Ответы [ 3 ]

1 голос
/ 24 февраля 2011

Если вы используете Rx, проверьте:

https://github.com/xpaulbettsx/ReactiveUI/blob/master/ReactiveUI/ObservableAsyncMRUCache.cs

(Копирование этого файла в ваше приложение должно быть довольно простым, просто обнулите строки this.Log () и интерфейс IEnableLogger)

Использовать его довольно просто, просто измените SelectMany на CachedSelectMany:

someArray.ToObservable()
    .CachedSelectMany(webService)
    .Subscribe(x => /* do stuff */);
1 голос
/ 06 февраля 2012

Если вы используете Rx, кажется, что вы могли бы довольно легко написать свою собственную реализацию IScheduler.Это может просто применить простой семафор, а затем передать работу в ThreadPool.При таком подходе вы получаете возможность оставлять ThreadPool, позволяя проводить тестирование, так как вы кодируете интерфейс, и у вас также будут хорошие швы для тестирования.небольшой набор потоков (<10), которыми вы управляете сами (вместо пула потоков), чтобы избежать голодания в ThreadPool. </p>

0 голосов
/ 24 февраля 2011

Проверьте Ami Bar SmartThreadPool . Он имеет массу функций, отсутствующих в пуле потоков .NET по умолчанию, позволяет установить свойство MaxThreads для каждого экземпляра пула потоков и поддерживает Silverlight.

...