首页 > 解决方案 > “存储”任务以供以后完成

问题描述

我正在尝试“存储”一个异步任务以供以后完成 - 我找到了异步缓存示例,但这有效地将任务结果缓存到并发字典中,以便可以重新加载它们的结果而无需再次重新执行任务( HTML 实现在这里)。

基本上我要设计的是一个任务字典,以相关 ID (GUID) 为键。这是为了协调来自另一个地方的传入结果(由 GUID 相关 ID 标识的 XML),我的目标是让任务暂停执行,直到结果进来(可能来自队列)。

这行得通吗?这是我第一次尝试正确的异步编码,我找不到任何与我希望的解决方案相似的东西,所以我很可能完全走在正确的轨道上。

我可以有效地“存储”一个任务以供以后完成,任务结果是在完成时设置的吗?

编辑:我刚刚发现 TaskCompletionSource (基于这个问题)是可行的吗?

标签: c#asynchronous

解决方案


您是否正在考虑延迟加载?您可以使用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;
}

推荐阅读