2017-10-09 61 views
3

将任务“A”的值复制到任务“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; 

回答

3

为什么不直接指定它?

machineConfiguration.LastReportTask = machineConfiguration.TempLastReportTask;

这样做tempLastReportValueTask.Result,您同步等待任务的执行,消除了大部分的利益。如果您需要触摸该值(如果您正在进行某种处理),那么您需要await它 - 然后没有必要再将它作为任务存储,因为它已经被评估和访问。

尽管如此,如果您确实需要这样做来将已评估的值包装到接口,ValueTask从性能的角度来看更可取。