Kgn*_*web 0 c# task-parallel-library async-await c#-6.0
下面是我的示例应用程序如何探索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";
}
}
Run Code Online (Sandbox Code Playgroud)
在#LOE 编译器抛出构建错误作为
不能等待无效
我的查询是
如何摆脱这个?谢谢!
首先,您应该将三个较小的任务声明为Task<string>而不是Task,否则您将不会在res. 当然,如果你不需要任何东西,那也不是问题res。
这里更重要的问题是你应该使用WhenAll而不是WaitAll. 前者返回 aTask或Task<T[]>让您等待,而后者只是等待任务完成(如果尚未完成)。既然你在await这里,你应该使用WhenAll.
所以你的代码应该是:
Task<string> t1 = Task.Run(() => obj.MakeTea());
Task<string> t2 = Task.Run(() => obj.ToastBread());
Task<string> t3 = Task.Run(() => obj.BoilEgg());
Console.WriteLine("Breakfast ready");
var res = await Task.WhenAll(t1, t2, t3);
// res will contain tea, bread and egg, in some order.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2406 次 |
| 最近记录: |