Что может быть стратегия, когда в очереди выполнения задачи очень большая?C#

Место общения программистов C#
Ответить
Anonymous
 Что может быть стратегия, когда в очереди выполнения задачи очень большая?

Сообщение Anonymous »

Я имею conturentqueue taskscollection , которая содержит объекты itask . Это не задача класс .NET Framework.

Код: Выделить всё

public class TaskRunner:IDisposable
{
private Task _orderTask;

public TaskRunner()
{
TasksCollection = new ConcurrentQueue();
}

public void Start()
{
_needToStopOrderTask = false;
_orderTask = Task.Factory.StartNew(() => OrderTaskLoop());
}

public void Stop()
{
lock(_lockObject)
_needToStopOrderTask = true;
}
}
Итак, когда происходит какое -то событие, я создаю itask и добавляю в concurrentQueue новая задача.
и в цикле потока я получаю каждую задачу и выполняю ее (выполняю какую -то код синхронно и последовательно. Похоже, что я не могу одновременно ее.private void OrderTaskLoop()
{
try
{
if (TasksCollection.Count == 0)
return;

while (!_needToStopOrderTask)
{
if(TasksCollection.Count>100)//too many tasks
{
//what should I do here?
}

ITask task = null;
var tryTake = TasksCollection.TryDequeue(out task);
///execute
}
}
}
< /code>
Итак, в моей ситуации я думаю, что я могу просто очистить очередь и продолжить работу, потому что мой бегун работает в контексте реального времени. Но может быть какой -то шаблон этой ситуации?>

Подробнее здесь: https://stackoverflow.com/questions/343 ... n-very-big
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»