我有以下方法:将数据传入任务延续
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'值的新引用,是正确的吗? –