我有两种简单的方法,我希望在它们完全完成之前不要继续进行进程。因此,我使用了await Task.WaitAll(tasks);但编译器在这一行给出了错误提示:
Severity Code Description Project File Line Suppression State
Error CS1503 Argument 1: cannot convert from '
'System.Collections.Generic.List<System.Threading.Tasks.Task>' to
'System.Threading.Tasks.Task'
为什么我要手动转换呢?我以为编译器会自动完成这个过程...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
internal class Program
{
public static void Count1()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Count 1 " + i);
Thread.Sleep(100);
}
}
public static void Count2()
{
for (int i = 0; i < 20; i++)
{
Console.WriteLine("Count 2 " + i);
Thread.Sleep(100);
}
}
public static async Task Run()
{
List<Task> tasks = new List<Task>();
Task t1 = Task.Run(()=>Count1());
Task t2 = Task.Run(() => Count2());
tasks.Add(t1);
tasks.Add(t2);
await Task.WaitAll(tasks); //ERROR IS THROWN HERE
}
private static void Main(string[] args)
{
Run();
Console.ReadKey();
}
}
Task.WaitAll(tasks.ToArray());
- Eliran Pe'erRun()
方法设置为非异步方法,并使其返回void
,那就没问题了... - Jon Skeet