复制任务' A'任务' B'?

时间:2017-10-09 08:45:46

标签: c# async-await task task-parallel-library

从任务' 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;

1 个答案:

答案 0 :(得分:3)

为什么不分配呢?

machineConfiguration.LastReportTask = machineConfiguration.TempLastReportTask;

通过执行tempLastReportValueTask.Result,您正在等待执行任务并消除大部分好处。如果您需要触摸该值(如果您正在进行某种处理),则需要await - 然后没有理由将其再次存储为任务,因为它已经过评估和访问。< / p>

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