我在教自己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() ));
答案 0 :(得分:5)
如果MethodX
和MethodY
是:
public async Task MethodX() {}
public async Task MethodY() {}
然后,您可以使用:
await MethodX();
await MethodY();
如果MethodX
和MethodY
是:
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获取。
希望有所帮助。