![]() |
1
3
我同意@AMieres的观点,邮箱处理器是一种很好的方法。我的代码版本有点不太通用—它直接使用邮箱处理器来实现这一目的,因此可能会更简单一些。 我们的邮箱处理器只有一条消息—您要求它下载一个URL,它会返回一个异步工作流,您可以等待该工作流来获得结果:
我们需要一个helper函数来异步下载URL:
要使用缓存进行实际下载,我们只需向邮箱处理器发送一个请求,然后等待返回的工作流(可能由多个请求共享)的结果。
|
![]() |
2
3
更新
你可以用
第一个参数是错误的处理程序,第二个参数是初始状态,在本例中是
此函数需要一个文件夹函数,该函数检查缓存并添加
首先
只是一个返回字符串和计时信息的伪函数。 现在检查缓存的文件夹函数:
最后,我们的下载功能:
测试
生成以下输出:
|
![]() |
3
2
我提供一个基于@Tomas petrichek答案的简化版本。
假设我们有一个下载函数,给定一个url返回一个
这里我们有一些简单的通用
此“库”的目的是简化
第一个参数是异常处理程序,第二个参数是返回值的函数。以下是我们如何定义
我们的储藏室是
调用我们使用的管理器
从而产生:
|
![]() |
fiedel · 为什么互斥锁可以被两个线程锁定? 1 年前 |
![]() |
da cheng · 在c++11中使用条件变量使程序陷入死锁 7 年前 |
![]() |
Eunjeong Choi · 为什么此代码返回意外结果?(条件变量) 7 年前 |
![]() |
Razonixx · 从线程内增加全局计数器变量,而不必等待每个线程 7 年前 |
![]() |
Administrator · c#-等待完成2个线程中的1个 7 年前 |