gpt4 book ai didi

c# - 将数据传递到 Task Continuation

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:23 25 4
gpt4 key购买 nike

我有以下方法:

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 表达式和任务延续。重要的是 headerdto在调用外部方法时,实例值在 lambda 表达式和任务继续中捕获。在上一次调用的任务完成之前,可能会再次调用相同的方法。

最佳答案

It is important that the header and dto instance values are captured within the lambda expression and task continuation at the time the outer method is called.

当使用 lambda 表达式时,关闭的是变量,而不是该变量的

只要 headerdto 不是您每次在进行方法调用之前修改的全局变量,您就应该没问题。如果它们全局变量,那么您需要找到一种方法为它们中的每一个创建一个本地副本。如果它们是引用类型,您需要克隆它们,如果它们是值类型,您需要将它们复制到 lambda 内部的局部变量。

关于c# - 将数据传递到 Task Continuation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32931380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com