2017-10-09 17 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

なぜ割り当ててみませんか? tempLastReportValueTask.Resultを行うことによって

machineConfiguration.LastReportTask = machineConfiguration.TempLastReportTask;

、あなたは同期タスクの実行を待っていると利益のほとんどを排除しています。値をタッチする必要がある場合(そこで何らかの処理を行っている場合)、awaitが必要です。既に評価済みでアクセス可能なので、タスクとして再度格納する理由はほとんどありません。

しかし、既に評価済みの値をインターフェイスにラップするには、実際にこの処理を行う必要がある場合は、パフォーマンス上の理由からValueTaskを使用することをお勧めします。

関連する問題