gpt4 book ai didi

c# - 为什么这个 async/await 代码会生成 "...not all code paths return a value"?

转载 作者:行者123 更新时间:2023-12-01 22:01:48 30 4
gpt4 key购买 nike

希望这不是重复,但是这里有 5000 多个问题“并非所有代码路径都返回值”!

很简单,为什么这个带有非泛型实现的方法编译得很好:

    public static async Task TimeoutAfter(this Task task, int millisecondsTimeout)
{
if (task == await Task.WhenAny(task, Task.Delay(millisecondsTimeout)))
await task;
else
throw new TimeoutException();
}

虽然尝试使方法通用会生成返回状态丢失/...并非所有代码路径都返回值警告/错误?:

    public static async Task<T> TimeoutAfter<T>(this Task<T> task, int millisecondsTimeout)
{
if (task == await Task.WhenAny(task, Task.Delay(millisecondsTimeout)))
await task;
else
throw new TimeoutException();
}

最佳答案

非泛型Task 类型在某种程度上相当于aawaitable void 方法。就像 void 方法一样,您不能从返回类型为 Task 的方法返回任何内容,这就是第一个示例能够编译的原因。不过,第二个示例需要泛型类型的返回值,而您没有在等待另一次调用的路径中提供该返回值。

引自MSDN reference关于 async 关键字,特别是关于返回类型。

You use Task if no meaningful value is returned when the method is completed. That is, a call to the method returns a Task, but when the Task is completed, any await expression that's awaiting the Task evaluates to void.

关于c# - 为什么这个 async/await 代码会生成 "...not all code paths return a value"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12115168/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com