使用Action 多个参数创建任务

我想在包含Action的Task中添加多个参数。 我回顾了现有的堆栈溢出问题使用Action 创建任务

请帮助我如何在任务中的Action方法中传递多个参数

Action action = (string msg, int count) => { Task.Factory.StartNew(async () => { await LoadAsync(msg, count); }); }; Task task = new Task(action, ....); 

行动方法是

 public static async Task LoadAsync(string message, int count) { await Task.Run(() => { Thread.Sleep(1500); }); Console.WriteLine("{0} {1} Exceuted Successfully !", message ?? string.Empty, (count == 0) ? string.Empty : count.ToString()); return "Finished"; } 

请帮助我如何创建异步方法的操作以及如何将操作添加到任务中。

只需传递这样的参数。

 Action action = async (msg, count) => await LoadAsync(msg, count); Task task = new Task(() => action("", 0)); // pass parameters you want 

如果你想获得回报价值

 Func> func = LoadAsync; Task task = func("", 0); // pass parameters you want var result = await task; // later in async method 

创建另一个执行您的操作并在那里传递参数的lambda

 var task = Task.Run(() => youraction(parameter1, parameter2)); 

特别是在您的情况下,您不需要创建许多将使用Task.RunStartNew创建的任务和线程

如果将方法更改为异步而不使用Thread.Sleep浪费线程

 public static async Task LoadAsync(string message, int count) { await Task.Delay(1500); var countOutput = count == 0 ? string.Empty : count.ToString(); var output = $"{message} {countOUtput}Exceuted Successfully !"; Console.WriteLine(output); return "Finished"; } 

然后你可以在任何地方调用它而不需要Task.Run

 await LoadAsync("", 0); 

您的LoadAsync方法已经返回了一个Task ,您可以随时启动它并“等待”。 因此,您不需要使用Task.Run来启动另一个任务(在您的情况下为线程)。

 var task = LoadAsync("param1", 3); // do something else var result = await task;