序言:学习(并记住我已经知道的)C#线程、同步和数据结构是一项自我分配的纯综合任务。
故事:
假设我有一个字典<string, string>
,它通过某个键表示文件的路径(http),即:
foo => http://domain.tld/file1
bar => http://domain2.tld/file2
我想实现一个类,它将实现一个具有 2 个方法的接口:
String Rand();
String Get(String key);
第一种方法会从所有可用的文件中随机选择文件,然后Get
返回一个特定的文件,或者更准确地说 - 下载文件的本地路径。
该类应该是线程安全的,因此如果多个线程请求相同key
的项目Get()
或Rand()
选择相同的项目 - 那么只有一个线程应该实际将文件下载到本地驱动器,或者如果文件已经存在则应该立即检索路径已下载。
所以,这就是我陷入困境的地方。
我将如何同步“下载器”以使同一个文件不会被下载两次?
我如何限制同时下载的数量?
PS:我不是在询问任何代码,只是对对这项任务有用的数据结构、类和模式的关键字。
PPS:任务是 100% 抽象的,所以如果您认为对要求的某些更改可以使其对我(作为学习者)更有趣/有用 - 欢迎您进行更改。