私は次のようなことを可能にするメカニズムをすでにC#で探しています:
- 10枚の画像をデコードする必要があります
- 2をデコードするのに十分なメモリしかありません
- 2 のデコードを開始し、残りをジョブ キューに入れる
- タスクをキャンセルする機能
c# の使用に関する推奨事項はありますか?
私は次のようなことを可能にするメカニズムをすでにC#で探しています:
c# の使用に関する推奨事項はありますか?
このBlockingCollection<T>
クラスにより、プロデューサー/コンシューマー キューの操作が非常に簡単になります。
var queue = new BlockingCollection<Action>();
//put work to do in the queue
for (int i = 0; i < 10; i++)
queue.Add(() => ProcessImage());
queue.CompleteAdding();
//create two workers
for (int i = 0; i < 2; i++)
{
Task.Factory.StartNew(() =>
{
foreach (var action in queue.GetConsumingEnumerable())
action();
});
}
//to cancel the work, empty the queue
Task.Delay(5000)
.ContinueWith(t =>
{
queue.GetConsumingEnumerable().Count();
});
Seamphore + ConcurrentQueue コンボを使用