C# 从Task.WhenAll获取返回值

C# 从Task.WhenAll获取返回值,c#,task-parallel-library,async-await,C#,Task Parallel Library,Async Await,希望这里有一个相当简单的例子。我有一个对象集合,每个对象都有一个异步方法,我想从中调用和收集值。我想让它们并行运行。我想要实现的可以总结为一行代码: IEnumerable<TestResult> results = await Task.WhenAll(myCollection.Select(v => v.TestAsync())); IEnumerable results=wait Task.WhenAll(myCollection.Select(v=>v.TestAsy

希望这里有一个相当简单的例子。我有一个对象集合,每个对象都有一个异步方法,我想从中调用和收集值。我想让它们并行运行。我想要实现的可以总结为一行代码:

IEnumerable<TestResult> results = await Task.WhenAll(myCollection.Select(v => v.TestAsync()));
IEnumerable results=wait Task.WhenAll(myCollection.Select(v=>v.TestAsync());

我尝试过各种各样的写作方法,但都没有成功。有什么想法吗?

如果您等待的任务具有相同类型的
任务的结果。whalll
返回它们的数组。例如,对于此类:

public class Test
{
    public async Task<TestResult> TestAsync()
    {
        await Task.Delay(1000); // Imagine an I/O operation.
        return new TestResult();
    }
}
公共类测试
{
公共异步任务TestAsync()
{
等待任务。延迟(1000);//想象一个I/O操作。
返回新的TestResult();
}
}
我们得到了以下结果:

var myCollection = new List<Test>();
myCollection.Add(new Test());

IEnumerable<TestResult> results = await Task.WhenAll(myCollection.Select(v => v.TestAsync()));
var myCollection=newlist();
myCollection.Add(新测试());
IEnumerable results=wait Task.WhenAll(myCollection.Select(v=>v.TestAsync());

TestAsync的外观如何?这行代码看起来不错。什么不起作用?任何编译器错误、运行时异常等?我猜他的
TestAsync()
签名是这样的:
public async TestResult TestAsync()
,而不是
public async Task TestAsync()
@I3arnon:这是OP编写的相同代码。最好澄清一下,什么对他不起作用。我已经解释了什么应该起作用以及为什么。我在等待OP澄清什么对他不起作用。我是个白痴-我的TestAsync方法返回的是一个任务而不是一个任务-我一改变它,它就起作用了。谢谢你给我指出了正确的方向——我看不出哪里出了问题,即使它就在我面前!您能否提供一个示例,其中
TestAsync
接受参数,并且是一个
static
方法?对我有效的方法是将
Task.WaitAll
替换为
wait Task.whalll