Информация об изменениях

Сообщение Re: Task Parallel Library от 30.01.2017 14:14

Изменено 30.01.2017 14:19 Sinix

Re: Task Parallel Library
Здравствуйте, Somescout, Вы писали:

S>Перефразирую в виде задачи — есть большое количество элементов, над которыми надо выполнить параллельную работу, но если просто запустить её сразу для всех — кончается память. Хотелось бы скормить все элементы и просто дождаться завершения. В идеале с возможностью добавления новых элементов в очередь с ожиданием.


Для раскидывания наргузки по нескольким ядрам проще всего использовать Parallel.ForEach. Если хочется то же самое на тасках — свой шедулер. Как пример.


S>PS. Можно ли жёстко прервать задачу? (т.е. не через Cancellation token)


Формально — можно, в CancellationToken есть метод Register(), который позволяет получить уведомление о прерывании операции, дальше прерываем, как удобно.

На практике бесполезно, т.к. в принципе оно ничем не отличается от расстрела произвольной области памяти — продолжать выполнение после прерывания потока в произвольной точке бессмысленно.
Re: Task Parallel Library
Здравствуйте, Somescout, Вы писали:

S>Перефразирую в виде задачи — есть большое количество элементов, над которыми надо выполнить параллельную работу, но если просто запустить её сразу для всех — кончается память. Хотелось бы скормить все элементы и просто дождаться завершения. В идеале с возможностью добавления новых элементов в очередь с ожиданием.


Для раскидывания наргузки по нескольким ядрам проще всего использовать Parallel.ForEach. Если хочется то же самое на тасках — свой шедулер. Как пример.


S>PS. Можно ли жёстко прервать задачу? (т.е. не через Cancellation token)


Формально — можно, в CancellationToken есть метод Register(), который позволяет получить уведомление о прерывании операции, дальше прерываем, как удобно.

На практике бесполезно, т.к. в принципе оно ничем не отличается от расстрела произвольной области памяти — продолжать выполнение после прерывания потока в произвольной точке бессмысленно.

UPD, к ответу ув. Sharov:
и вот это тогда: http://stackoverflow.com/a/11100423