c# - “存储”任务以供以后完成
问题描述
我正在尝试“存储”一个异步任务以供以后完成 - 我找到了异步缓存示例,但这有效地将任务结果缓存到并发字典中,以便可以重新加载它们的结果而无需再次重新执行任务( HTML 实现在这里)。
基本上我要设计的是一个任务字典,以相关 ID (GUID) 为键。这是为了协调来自另一个地方的传入结果(由 GUID 相关 ID 标识的 XML),我的目标是让任务暂停执行,直到结果进来(可能来自队列)。
这行得通吗?这是我第一次尝试正确的异步编码,我找不到任何与我希望的解决方案相似的东西,所以我很可能完全走在正确的轨道上。
我可以有效地“存储”一个任务以供以后完成,任务结果是在完成时设置的吗?
编辑:我刚刚发现 TaskCompletionSource (基于这个问题)是可行的吗?
解决方案
您是否正在考虑延迟加载?您可以使用Lazy<Task>
(这将初始化任务但不会将其排队运行)。
var tasks = new Dictionary<Guid, Lazy<Task>>();
tasks.Add(Task1Guid, new Lazy<Task>(() => { whatever the 1st task is }));
tasks.Add(Task2Guid, new Lazy<Task>(() => { whatever the 2nd task is }));
void async RunTaskAsync(Guid guid)
{
await tasks[guid].Value;
}
推荐阅读
- flutter - Flutter:图像资源服务捕获的异常
- java - java.security.InvalidAlgorithmParameterException:不支持的 IV 长度:10 字节。仅支持 12 字节长的 IV
- react-native - 如何在 React Native 中实现自定义切换开关?
- c++ - std::unordered_map 迭代器尊重问题
- android - 当我使用延迟时,我应该从主线程切换到默认线程还是 IO 线程
- reactjs - 我如何使用 react js axios 停止此计数器并将最终值放入数据库中
- javascript - 当在 javascript 中调用时值上升 +0.01 的函数不起作用(初学者)
- linux - 在新的 Ubuntu VPS 上安装 cpanel 时出现 Tar 错误
- java - 为什么 String x = "abc".toUpperCase() 中的 "abc" 不包含在实习生池中?
- java - CORS 策略和 Spring Security