我有一个List的Task<bool>,我要重复它,这取决于期待已久的结果,我决定是否继续或中断,但具有讽刺意味的foreach只是执行的任务和等待关键字不起作用
这是我的代码
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;
}
Run Code Online (Sandbox Code Playgroud)
结果:两个函数都是执行.
问题:我怎么能在里面使用foreach?
并提前感谢.
你可以await像现在一样在foreach中使用.
结果:两个函数都是执行.
两个函数都应该执行.在返回result之前不会设置为false Method2,此时两者都已经运行.您也可以在两个Task<bool>实例之前启动这两个实例await,因此两者都在(可能)在foreach循环之前运行.
扭转你的方法的顺序,他们将不能同时一定运行(尽管它们可能,因为你开始他们):
var tList = new List<Task<bool>> { Method2(), Method1()};
Run Code Online (Sandbox Code Playgroud)
如果你想完全延迟,你可以把它写成:
var tList = new List<Func<Task<bool>>> { Method2, Method1};
foreach (var taskFunc in tList)
{
var result = await taskFunc();
if(!result)
break;
}
Run Code Online (Sandbox Code Playgroud)