将任务 'A' 的结果复制到任务 'B'?

Copy result from task 'A' to task 'B'?

将任务 'A' 中的值复制到任务 'B'。

这是实体示例:

public class MachineConfiguration
{
      public Task<Dictionary<string, string>> LastReportTask { get; set; }
      public Task<Dictionary<string, string>> TempLastReportTask { get; set; }
}

我的想法是使用价值任务将结果从一个任务转移到另一个任务。我不确定这是否是最佳解决方案。

var tempLastReportValueTask = new ValueTask<Dictionary<string, string>>(machineConfiguration.TempLastReportTask);
machineConfiguration.LastReportTask = Task.FromResult(tempLastReportValueTask.Result);
machineConfiguration.TempLastReportTask = null;

为什么不直接赋值呢?

machineConfiguration.LastReportTask = machineConfiguration.TempLastReportTask;

通过执行tempLastReportValueTask.Result,您正在同步等待任务的执行并消除大部分好处。如果您需要触摸该值(如果您正在那里进行某种处理),您需要 await 它——那么没有理由将它再次存储为任务,因为它已经被评估和访问。

然而,如果您确实需要这样做以将已评估的值包装到接口中,出于性能原因,ValueTask 更可取。