Как использовать функцию задач C # 4.0 с этими свойствами - присваивать переменные во время выполнения - поддерживать определенное количество задач в живых - PullRequest
0 голосов
/ 02 октября 2011

Хорошо, я искал несколько дней, но нет примера того, чего я пытаюсь достичь. В настоящее время я могу использовать задачи для многопоточного сканирования, но это очень плохо написано. Вы можете увидеть весь код здесь:

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/6fa6fd12-85c5-4489-81b1-25bc0126d406

Теперь идет мой вопрос. Я хочу использовать System.Threading.Tasks.Task для многопоточности. Разработка Microsoft Visual Studio 2010 и C # 4.0.

Что мне нужно, это

1 -) Я хочу, чтобы определенное количество задач выполнялось постоянно. Поэтому, когда поток завершил свою работу, другой поток должен начать работать немедленно. Таким образом, всегда будет активно определенное количество потоков.

2 -) Мне нужно иметь возможность задавать переменные задачи во время выполнения. Так что подумайте, так как у меня есть пул ссылок. Я начал с первых 100, но, скажем, 45-е задание закончилось первым. Таким образом, будет создано еще одно задание, и оно займет номер 101-й ссылки. Когда другой закончит работу, он продолжит работать таким же образом, и всегда будет определенное количество заданий.

3 -) Мне нужно иметь возможность собирать результаты заданий. После того, как задание выполнено, каким-то образом соберите результат. Эта часть кажется самой легкой частью.

Какой бы пример задачи я не обнаружил, он показывает только 2 задачи или 3 задачи, при этом определенные переменные не меняются во время выполнения и не поддерживаются определенные числа. Будущее за многопоточными приложениями, но документация там плохая.

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Вы уже просматривали TPL-DataFlow CPL:

TPL Dataflow (TDF) - это новая библиотека .NET для создания параллельных Приложения. Это продвигает актер / агент-ориентированные проекты через примитивы для передачи сообщений, обработки данных и конвейеризации. TDF основывается на API и инфраструктуре планирования, предоставляемой Task Parallel Library (TPL) в .NET 4 и интегрируется с языковая поддержка асинхронности, предоставляемая C #, Visual Basic и F #.

Это бета но я думаю, что ваша проблема не в потоках. Похоже, вы пытаетесь построить какую-то модель программирования на основе агентов, и этот DataFlow предоставляет вам действительно хорошие инструменты для этого.

Вот домашняя страница , а вот хорошее видео об этом.

0 голосов
/ 03 октября 2011

Зачем вам нужно определенное количество заданий? Пусть пул / API решит.

Передача данных в задачи аналогична передаче данных в потоки: разделяйте структуру данных.

Используйте задачу, чтобы вернуть результат задачи

EDIT

Вы не можете установить количество рабочих потоков или количество операций ввода-вывода Завершение потоков до числа меньше числа процессоров в компьютере.

Если общеязыковая среда выполнения размещается, например, через Интернет Информационные службы (IIS) или SQL Server, хост может ограничить или предотвратить изменение размера пула потоков.

Будьте осторожны при изменении максимального количества потоков в потоке бассейн. Хотя ваш код может принести пользу, изменения могут иметь неблагоприятные влияет на используемые вами библиотеки кода.

Установка слишком большого размера пула потоков может привести к проблемам с производительностью. Если одновременно выполняется слишком много потоков, переключение задач накладные расходы становятся существенным фактором.

( от MSDN )

Действительно, вы никогда не сможете заставить определенное количество задач быть активными. Просто создайте задачи и дайте среде выполнения решить, какие из них должны / могут выполняться.

Если вам это не нравится, не используйте TPL и принесите свои собственные темы.

...