2017-10-09 11 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을 사용하는 것이 좋습니다.