将两种方法链成任务

时间:2017-11-23 13:19:37

标签: c# multithreading task

我在教自己c#并努力理解线程,异步等。我正在尝试做一些实践练习以提高我的知识。

我有两种方法:方法x和方法Y

我需要创建一个运行方法X的任务,一旦方法x完成,它将运行方法y。

然后我想在此基础上构建并创建相同的任务三次。所以基本上有三个不同的任务运行两种方法。

方法是public void。我试过这样的事情:

Task[] tasks = new Task[2];
tasks[1] = Task.Run(() => x(n1.ToString()));
tasks[2] = tasks[1].ContinueWith(antecedent => y() ));

3 个答案:

答案 0 :(得分:5)

如果MethodXMethodY是:

public async Task MethodX() {}
public async Task MethodY() {}

然后,您可以使用:

await MethodX();
await MethodY();

如果MethodXMethodY是:

public void MethodX() {}
public void MethodY() {}

然后,您可以使用:

await Task.Run(() => 
{ 
    MethodX();
    MethodY();
}

答案 1 :(得分:0)

如果方法是异步的,你可以这样做:

await MethodX();
await MethodY();

@Edit when void

  await Task.Run(() => MethodX());
  await Task.Run(() => MethodY());

答案 2 :(得分:0)

您可以创建任务列表,然后在构建集合时定义任务:

List<Task> TasksToDo = new List<Task>();

TasksToDo.AddRange(from item in someCollection.AsEnumerable()
                   select new Task(() => {
                                            MethodX();
                                            MethodY();
                                         }));

TasksToDo.ForEach(x => x.Start());
Task.WaitAll(TasksToDo.ToArray());

您尚未指定需要它,但如果需要,您可以指定Task<t>并声明返回类型,以便在完成后从TasksToDo获取。

希望有所帮助。