并非所有代码路径 return 异步语句 lambda 中的值错误

Not all codepaths return a value error in async statement lambda

我试图将对服务的调用包装为函数,以便将其传递给重试框架。我首先尝试了以下方法:

Func<Task<Obj>> serviceCall = async () => await this.client.call();

Obj callResponse = await retryPolicy.ExecuteAsync(serviceCall);

这段代码可以编译,但是,我想为每个函数调用写入日志,所以我尝试将日志添加到函数中。我的想法是将功能更改为:

Func<Task<Obj>> serviceCall = async () => {
    logger.log("Calling client");
    await this.client.call();
};

但是,现在 visual studio 告诉我并非所有代码路径 return 都是 Func<Task\<Obj>> 类型的 lambda 表达式中的值。以某种方式添加花括号,并将其从表达式 lambda 转换为语句 lambda 会导致一些问题,我假设代码的异步部分。

您正在声明 Func<Task<Obj>>,它不带任何参数并且 return 是 Task<Obj>

当您使用这样的表达式语法时:

Func<Task<Obj>> serviceCall = async () => await this.client.call();

翻译成:

Func<Task<Obj>> serviceCall = async () => { return await this.client.call(); }

所以 return 语句是隐含的。当您使用括号时,您需要明确指定 return:

Func<Task<Obj>> serviceCall = async () => {
    logger.log("Calling client");
    return await this.client.call();
};