调用Task.Start()时更新参数值
本文关键字:更新 参数 Task Start 调用 | 更新日期: 2023-09-27 18:25:20
调用Task.Start()
时,如何更新发送给WriteToConsole
的参数currentTime
?
在下面的示例中,当我声明task0
时,currentTime
的值设置为1/1/2000。当执行task0.Start();
时,currentTime
的值已经改变为DateTime.Now
。但Console.WriteLine
显示"1/1/2000"。
我需要做些什么来更新currentTime
,以便用当前值调用task0.Start()?
static void WriteToConsole(DateTime n)
{
Console.WriteLine(n.ToString());
}
static void Main(string[] args)
{
DateTime currentTime = new DateTime(2000, 01, 01);
Task task0 = new Task(n => WriteToConsole((DateTime)n), currentTime);
for (; ; )
{
currentTime = DateTime.Now;
if (true)
{
task0.Start();
}
if (task0.Status.Equals(TaskStatus.Running))
{
// Do Something
}
}
}
Task task0 = new Task(() => WriteToConsole(currentTime));
应该起作用,因为捕获的是变量,而不是值。
将参数封装在包装类中,如下所示:
private class DtWrapper
{
public DateTime CurrentTime {get; set; }
}
DtWrapper currentTime = new DtWrapper { CurrentTime = new DateTime(2000, 01, 01) } ;
Task task0 = new Task(n => WriteToConsole(((DtWrapper)n).CurrentTime), currentTime);
for (; ; )
{
currentTime.CurrentTime = DateTime.Now;
if (true)
{
task0.Start();
}
if (task0.Status.Equals(TaskStatus.Running))
{
// Do Something
}
}
如果您没有特定的理由将当前时间作为参数(n=>…),那么使用th的答案,这是一个更好的因子分解。