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

我想我需要在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相关问答推荐

为什么DotNet新的webapi;命令会为我生成不同的文件夹

ASP.NET核心最小API必须以正斜杠开头吗?

在 F# 中处理 Option - Some(null) 的好策略是什么

仅在有换行符时捕获分隔符之间的所有文本

当 Func 委托需要接口作为参数时,它是如何工作的?

如何确定计时器是否正在运行?

C#字符串的GetHashCode()是如何实现的?

为什么不能使用 null 作为 Dictionary 的键?

ICommand MVVM 实现

具有透明背景且包含不透明控件的 WPF 窗口

如何以编程方式 Select ListView 中的项目?

如何在 WPF 中创建/制作圆角按钮?

日期时间是什么意思?在 C# 中是什么意思?

MemoryStream.Close() 或 MemoryStream.Dispose()

获取 .NET 程序集的 AssemblyInformationalVersion 值?

形成两个列表并集的最简单方法

Find() 和 First() 抛出异常,如何改为返回 null?

C# (.NET) 设计缺陷

如何使用 EPPlus 设置 XLSX 单元格宽度?

.NET 的 XPath 和 XSLT 2.0?