0

私は次のようなことを可能にするメカニズムをすでにC#で探しています:

  • 10枚の画像をデコードする必要があります
  • 2をデコードするのに十分なメモリしかありません
  • 2 のデコードを開始し、残りをジョブ キューに入れる
  • タスクをキャンセルする機能

c# の使用に関する推奨事項はありますか?

4

2 に答える 2

1

この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();
    });
于 2013-03-18T15:05:13.480 に答える
0

Seamphore + ConcurrentQueue コンボを使用

于 2013-03-18T14:52:13.957 に答える