我有以下方法:將數據傳入任務延續
private void GetHistoricalRawDataFromTextFiles(MessageHeader header, HistoricalRawDataFromTextFileSubscriptionDto dto)
{
var computeInstance = GetComputeInstance(dto.SubscriberId, dto.ComputeInstanceId);
var task = computeInstance.GetHistoricalRawDataFromTextFiles(dto, progress => SendProgress(header.Sender, progress));
task.ContinueWith(myTask =>
{
dto.TimeSeries = myTask.Result;
Messenger.SendTo(SubscriberId, header.Sender, MessageType.Reply, MessageTopic.HistoricalRawDataFromTextFiles, dto);
});
}
方法computeInstance.GetHistoricalRawDataFromTextFiles
返回Task<List<string>>
,我的問題是
- 這是否是通過
header
和dto
到拉姆達的正確方法表達和任務延續。在外部方法被調用時,在lambda表達式和任務延續內捕獲header
和dto
實例值是很重要的。在上次調用的任務完成之前,可能會再次調用相同的方法。
它們不是全局變量,因爲它們可以全局訪問,但是,每個外部消息調用都會改變'header'和'dto'。那麼,唯一的方法就是克隆它們,然後將克隆傳遞給lambda和任務? –
不,如果它們不是全局可修改的,並且每次都傳遞一個新實例,那麼代碼沒問題。 –
謝謝,這使得它更清晰,所以,這只是歸結爲我傳入了對'header'和'dto'值的新引用,是正確的嗎? –