-3

フォルダ内の写真の数に基づいてユーザーを作成したい。

例えば:

user.1 random(4)[photos1-4]
dosomething(user.1)

user.2 random(6)[photos5-10]
dosomething(user.2)

user.3 random(3)[photos11-13]
dosomething(user.3)

user.last [photos.leftover]
dosomething(user.last)

これを行う方法についてのアイデア?

4

1 に答える 1

0

これを行う最善の方法は、作業リストをロードし、リストをランダム化してから、エンド ワーカーによって引き出される何らかの形式のキューにリストを入れることです。

private BlockingCollection<string> GetWorkSoruce()
{
    List<string> sourceList = GetListOfFiles(); //How you get your list is up to you.

    Shuffle(sourceList); //see http://stackoverflow.com/questions/273313/randomize-a-listt-in-c-sharp

    //Create a thread safe queue that many consumers can pull from.
    var collection = BlockingCollection<string>(new ConcurrentQueue<string>(sourceList));
    collection.CompleteAdding();

    return collection;
}

これで、各ワーカー (ユーザー) がキューから抜け出し、作業を行うことができます。キューは ConcurrentQueue であるため、多くのスレッドから多くのワーカーを同時に動作させることができます。

private void WorkerDoWork(BlockingCollection<string> workSource, int itemsToTake)
{
    foreach(var imagePath in workSource.GetConsumingEnumerable().Take(itemsToTake))
    {
        ProcessImage(imagePath);
    }
}
于 2013-11-10T18:16:05.997 に答える