我想根据文件夹中的照片数量创建用户。
例如:
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)
关于如何做到这一点的想法?
最好的方法是加载你的工作列表,随机化列表,然后将列表放入某种形式的队列中,由最终工作人员拉出。
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);
}
}