将任务 '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
更可取。
将任务 '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
更可取。