1

オブジェクトをConcurrentQueue TasksCollection含むものがありITaskます。Task.Net フレームワークのクラスではありません。

public class TaskRunner:IDisposable
  {
    private Task _orderTask;

   public TaskRunner()
     {
      TasksCollection = new ConcurrentQueue<ITask>();   
     }

   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
           }
    }
}

したがって、私の状況では、ランナーがリアルタイムのコンテキストで動作するため、キューをクリアして作業を続行できると思います。しかし、この状況には何らかのパターンが存在するのではないでしょうか? ConcurrentQueueカウントが大きすぎる場合はどうすればよいですか?

ありがとうございました!

4

1 に答える 1