Код: Выделить всё
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;
}
}
и в цикле потока я получаю каждую задачу и выполняю ее (выполняю какую -то код синхронно и последовательно. Похоже, что я не могу одновременно ее.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
Мобильная версия