如何在控制台应用程序中从Task.WaitAll()获取返回值?
我使用控制台应用程序作为概念certificate和获得异步返回值的新需求。
我发现我需要在main方法中使用Task.WaitAll()
来避免需要异步“main()”方法,这是非法的。
我现在卡住试图弄清楚允许我使用generics的重载,或者只返回我可以强制转换的对象,但是在Main()中。
您没有从Task.WaitAll
获得返回值。 您只能使用它等待多个任务的完成,然后从任务本身获取返回值。
var task1 = GetAsync(1); var task2 = GetAsync(2); Task.WaitAll(task1, task2); var result1 = task1.Result; var result2 = task2.Result;
如果您只有一个Task
,只需使用Result
属性。 如果任务尚未完成,它将返回您的值并阻止调用线程:
var task = GetAsync(3); var result = task.Result;
在异步任务上同步等待(阻塞)通常不是一个好主意(“异步同步”),但我猜这对于POC来说很好。
为了获得最佳实践,请使用新的异步处理方式。 代替
-
Task.WaitAll
使用await Task.WhenAll
-
Task.WaitAny
使用await Task.WhenAny
上面的代码可以写成:
var task1 = GetAsync(1); var task2 = GetAsync(2); var results = await Task.WhenAll(task1, task2); var result1 = results[0]; var result2 = results[1];