J'ai une fonction getpivoteddatatable (données, "date", "id", "drapeau") renvoie des données en format pivotant. Je veux appeler cette méthode à l'aide de la tâche, mais comment passer plusieurs paramètres dans la tâche. P>
5 Réponses :
Vous pouvez créer une classe Helper em> qui conserve tous les paramètres dont vous avez besoin dans votre tâche. p>
Vous pouvez utiliser l'expression de Lambda, ou une fonction FUNC pour passer des paramètres :)
public Form1()
{
InitializeComponent();
Task task = new Task(() => this.GetPivotedDataTable("x",DateTime.UtcNow,1,"test"));
task.Start();
}
public void GetPivotedDataTable(string data, DateTime date, int id, string flag)
{
// Do stuff
}
Bien que surveillez les variables changeantes (telles que commencer plusieurs tâches avec IDS séparées) - vous devez ensuite créer une copie locale de la variable: Stackoverflow.com/questions/10179691/... .
Si vos paramètres sont de types différents, vous pouvez utiliser un tableau d'objet, puis en arrière sur les types d'origine.
Consultez cet exemple d'application de la console: P>
static void Main(string[] args)
{
var param1String = "Life universe and everything";
var param2Int = 42;
var task = new Task((stateObj) =>
{
var paramsArr = (object[])stateObj; // typecast back to array of object
var myParam1String = (string)paramsArr[0]; // typecast back to string
var myParam2Int = (int)paramsArr[1]; // typecast back to int
Console.WriteLine("");
Console.WriteLine(string.Format("{0}={1}", myParam1String, myParam2Int));
},
new object[] { param1String, param2Int } // package all params in an array of object
);
Console.WriteLine("Before Starting Task");
task.Start();
Console.WriteLine("After Starting Task");
Console.ReadKey();
}
Vous pouvez également utiliser des "paramètres". Vérifiez C # Params info
Vous pouvez utiliser TUPLE
Task<Tuple<Tuple<Parame1,Parame2,Parame....>> Func()
{
}
var r = await Func();
r.Item1;
r.Item2;
r.Item.....
Pendant que vous répondez à une question .. Veuillez donner une explication comment votre solution résolvait le problème.
Ceci est une réponse valide