【发布时间】:2013-05-02 23:47:27
【问题描述】:
我有一个 List 或 Task<bool> ,我想对其进行迭代,并根据等待的结果决定是继续还是中断,但具有讽刺意味的是,foreach 只是执行任务而 await 关键字不起作用
这是我的代码
private async void Execute(object sender, EventArgs e)
{
var tList = new List<Task<bool>> { Method1(), Method2()};
foreach (var task in tList)
{
var result = await task;
if(!result)
break;
}
}
public async Task<bool> Method1()
{
await Task.Delay(1000);
Console.WriteLine("Method1");
return false;
}
public async Task<bool> Method2()
{
await Task.Delay(1000);
Console.WriteLine("Method2");
return true;
}
结果:两个函数都执行了。
问题:我如何在 foreach 中使用 await ?。
提前感谢。
【问题讨论】:
-
Method1()返回true,所以我希望你的循环继续。也就是说,您在这里有一个基本问题:您在开始循环之前启动了两个任务,因此即使第一个任务返回false,第二个任务也可能已经完成。您仍然会忽略任何进一步的结果,但不一定会跳过这些结果的计算。 -
抱歉编辑了结果相同,如果返回 false 应该会中断。