Ich habe eine einfache Demo-Klasse zusammen, die wie folgt aussieht:Eine Referenz in einer Aufgabe pflegen?
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" };
}
Der folgende Code druckt:
Welche vollkommen logisch ist, aber nicht, was
B I will (ich möchte
A
drucken). Ich würde erwarten, in der Lage sein,StartNew()
mit einem Argument aufrufen, die den ersten Verweis aufh
innerhalb der Delegat beibehalten würde, aber ich kann diese Option nicht sehen.Fehle ich etwas?
Edit: Ich sehe, dass ich zwar in einer Art
object
Task.Factory.StartNew(new Action<object>((obj) => { Console.WriteLine((obj as Hello).Name); }),h);
Gezwungen, zu passieren scheint ein wenig .NET 1.1/pre-Generika mir verwenden können, so dass für eine bessere Option zu hoffen.
Nebenbei bemerkt, Sie sollten 'StartNew' nicht verwenden. Verwenden Sie stattdessen "Task.Run". –