下面是我的示例应用程序看起来像如何浏览async/await
和TPL
class Program
{
static async void Main(string[] args)
{
Console.WriteLine("Order for breakfast");
Breakfast obj = new Breakfast();
Task t1 = Task.Run(() => obj.MakeTea());
Task t2 = Task.Run(() => obj.ToastBread());
Task t3 = Task.Run(() => obj.BoilEgg());
Console.WriteLine("Breakfast ready");
var res = await Task.WaitAll(t1, t2, t3); // LOE - throwing error
}
}
class Breakfast
{
//making a tea
public string MakeTea()
{
return "tea";
}
//toasting bread
public string ToastBread()
{
return "bread";
}
//boil eggs
public string BoilEgg()
{
return "egg";
}
}
在#LOE编译器处,编译错误为:
无法等待作废
我的查询是
如何摆脱这种情况?谢谢!
首先,应将三个较小的任务声明为Task<string>
而不是Task
,否则在res
中不会得到任何信息。当然,如果您不需要res
中的任何内容,那不是问题。
这里更重要的问题是您应该使用WhenAll
而不是WhenAll
。前者返回WaitAll
或Task
以便您等待,而后者只是等待任务完成(如果尚未完成)。由于您在此处Task<T[]>
,因此应使用await
。
所以您的代码应该是:
WhenAll