オブジェクトを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
カウントが大きすぎる場合はどうすればよいですか?
ありがとうございました!