我正在尝试将我的 foreach 函数转换为 linq 函数
这是我的正常代码[工作正常]
var tList = new List<Func<Task<bool>>> { Method1, Method2 };
tList.Shuffle();
int succeed = 0;
foreach (var task in tList)
{
var result = await task();
if(!result)
break;
succeed += 1;
}
MessageBox.Show(succeed == 1 ? "Loading complete." : "Something went wrong!");
这是转换为 Linq 后 [Giving 2 compiler errors]
var tList = new List<Func<Task<bool>>> { Method1, Method2 };
tList.Shuffle();
int succeed = tList.Select(async task => await task()).TakeWhile(result => result).Count();
MessageBox.Show(succeed == 1 ? "Loading complete." : "Something went wrong!");
错误
- 无法将 lambda 表达式转换为委托类型“System.Func,bool>”,因为块中的某些返回类型不能隐式转换为
委托返回类型- 无法将类型“System.Threading.Tasks.Task”隐式转换为“bool”
我想知道为什么编译器会给出这些消息,所以任何帮助都将不胜感激。
注意:我也尝试.TakeWhile(async result => await result)
过那个错误
- 异步方法的返回类型必须是 void、Task 或 Task T
Method1 和 Method2 如果有人想要的话:
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;
}