并非所有代码路径 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();
};
我试图将对服务的调用包装为函数,以便将其传递给重试框架。我首先尝试了以下方法:
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();
};