我有一个方法:如何在不添加不可达代码的情况下编译异步lambda?
void MyMethod<T>(params Func<T>[] funcs) { }
我想与异步lambda表达式来调用它:
MyMethod(async() => 1, async() => 2, async() => 3);
它的工作原理!但是如果我想要第三个lambda引发异常呢?
MyMethod(async() => 1, async() => 2, async() => { throw new Exception(); });
上面没有编译,它提供了两个相同的错误:
CS0201仅分配,调用,递增,递减和新对象的表达式可以作为陈述
我不知道它为什么会出现这个错误,但我明白为什么它不能编译 - 前两个lambda是Func<Task<int>>
,而最后一个是Func<Task>
。我希望它给我一个更好的编译错误,但让我们把这个问题放在一边。
如何获得编译代码?我可能不得不告诉编译器我想为第三个异步lambda生成什么类型的任务。我发现一个方法是指定throw
声明后return
声明:被丑陋和混乱除了
MyMethod(async() => 1, async() => 2, async() => { throw new Exception(); return 3; });
,它会生成一个编译器警告:
CS0162可达代码检测
如何让编译器高兴?我如何避免无法访问的代码才能进行编译?是否有另一种方法来指定异步lambda返回的任务类型?
此外,为什么我在上面的例子中得到一个CS0201错误?
给出:既然是有效的,你想要的委托,只需将它转换为是什么? – Servy
@Servy:实际的代码确实使用了等待。在第三个lambda中甚至会引发异常。这是一个精简版的代码。 –
然后提供一个实际代表您的实际代码的示例。 – Servy