使用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.Run
或StartNew
创建的任务和线程
如果将方法更改为异步而不使用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;
- dotnet dll反编译并更改代码
- 更改控制台窗口的大小会抛出ArgumentOutOfRangeException
- WindowsMobile:从DialogForm处理exception后应用程序退出
- CodedUI测试 – 为整个测试集启动一次浏览器
- 我是否必须包含所有System.Collections.Immutable依赖项?
- 如何在Microsoft Bot Framework + C#中安排任务?
- iTextSharp table.SpacingBefore not not working
- 在C#中的php(pcre)中找到的分支重置运算符(“?|”)的等价物是什么?
- 是否可以在匿名类型中有一个条件字段