我正在使用一个控制台应用程序作为概念证明,以及获取异步返回值的新需求.

我想我需要在main方法中使用Task.WaitAll(),以避免需要异步"main()"方法,而这是非法的.

我现在一直在试图找出一个重载,它允许我使用泛型,或者只返回一个我可以强制转换的对象,但是在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来说没问题.

.net相关问答推荐

.NET Core 中的微服务

为什么我在环境变量中有不同的值?

如何计算给定2个字符串的距离相似性度量?

无法解析此引用.找不到程序集

在 .NET 中获取执行 exe 路径的最佳方法是什么?

抛出 ArgumentNullException

在 WPF 窗口中获取当前聚焦的元素/控件

使用 C# 清除文本文件的内容

.NET 4.0 中有内置的二叉搜索树吗?

如何等到远程 .NET 调试器附加

VB.NET 与 C# 整数除法

如何防止任务的同步延续?

List 是否保证项目将按照添加的顺序返回?

获取系统中已安装的应用程序

是否可以判断对象是否已附加到实体框架中的数据上下文?

C# 应用程序中的全局键盘捕获

C# 应用程序中的资源和嵌入式资源有什么区别?

从不同程序集中的类名中解析类型

泛型类的静态成员是否与特定实例相关联?

SqlParameter 已被另一个 SqlParameterCollection 包含 - using() {} 作弊吗?