我已经把一个简单的演示类,看起来像这样:在任务中维护引用?
public class HelloWorld
{
public string Name { get; set; }
}
public Main()
{
var h = new HelloWorld() { Name = "A" };
Task.Factory.StartNew(() => { Console.WriteLine(h.Name); });
h = new HelloWorld() { Name = "B" };
}
下面的代码打印:
乙
这是完全合乎逻辑的,但不是我想要(我想打印A
)。 我期望能够用参数调用StartNew()
,该参数将保留代表内的第一个参考h
,但我看不到此选项。
我错过了什么吗?
编辑:我可以看到,我可以使用
Task.Factory.StartNew(new Action<object>((obj) => { Console.WriteLine((obj as Hello).Name); }),h);
被迫在一个类型的object
传递似乎有点.NET 1.1 /预仿制药给我的,所以希望有一个更好的选择。
在附注中,您不应该使用'StartNew'。改为使用'Task.Run'。 –