Можно ли использовать долгоживущие задачи, которые не являются долгосрочными? - PullRequest
1 голос
/ 19 октября 2019

Например, если бы мне пришлось выбирать между этими двумя, я должен посвятить Thread для периодической задачи очистки, или я должен просто использовать цикл Task, который никогда не заканчивается?

ПосколькуThread спал бы большую часть времени, лишь изредка просыпался с сигналом (не обязательно в любое конкретное время), чтобы выполнить небольшую очистку, я чувствую, что поток будет потрачен впустую. Один поток может не иметь большого значения, но я потенциально буду иметь десятки из них.

Вместо создания выделенного Thread, который обычно спит и потребляет ресурсы, я хотел бы использовать Task, который зацикливаетсявечно, ожидая (асинхронно) сигнала «пробуждения» во время каждой итерации.

Это не будет «длительной» задачей (т. е. она не будет привязана к процессору очень долго), но этобудет «долгоживущей» задачей (т. е. она никогда не завершится и будет просто отслеживаться в некоторой очереди ожидания).

Предположим, я запускаю многие из этих «долгоживущих» задач. Буду ли я сталкиваться с какими-либо проблемами с производительностью при таком подходе в результате просто существующих долгоживущих задач? Кажется, проще управлять работой с Задачами и запускать их в потоках ThreadPool. Работа не требует какого-либо особого приоритета над другой работой, которая может также выполняться в потоках ThreadPool.

1 Ответ

3 голосов
/ 19 октября 2019

Я бы тоже не использовал.

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

Это кажетсякак идеальный вариант использования для Timer. Пока время идет, ничего не существует (ни потока, ни задачи). По истечении этого времени обработчик события запускает поток ThreadPool.

...