C# 并非所有代码路径都在lambda表达式中返回值

C# 并非所有代码路径都在lambda表达式中返回值,c#,lambda,polly,C#,Lambda,Polly,这是我的代码: var策略=策略 手柄 .RetryAsync1; httpResponse消息httpResponse=null; 等待策略。ExecuteAsyncasync=> { httpResponse=await_graphClient.HttpProvider.SendAsyncbatchRequest; }; 这很有效。我将代码修改为: var策略=策略 手柄 .OrResultr=>r.StatusCode==HttpStatusCode429 .RetryAsync1; 然后

这是我的代码:

var策略=策略 手柄 .RetryAsync1; httpResponse消息httpResponse=null; 等待策略。ExecuteAsyncasync=> { httpResponse=await_graphClient.HttpProvider.SendAsyncbatchRequest; }; 这很有效。我将代码修改为:

var策略=策略 手柄 .OrResultr=>r.StatusCode==HttpStatusCode429 .RetryAsync1; 然后返回此错误:

并非所有代码路径都在Func类型的lambda表达式中返回值


简而言之,为了让Polly能够检查返回值,您需要返回一些东西\_ツ_/“”

范例

长话短说

ExecuteAsync签名的区别如下

// this just expects a task, which can be supplied with an async lamda
public Task ExecuteAsync(Func<Task> action)

然而,当您使用OrResult时,没有这种过载,这是有道理的。如果您没有提供结果,Polly将无法检查结果。

简而言之,为了Polly能够检查返回值,您需要返回一些东西'\_ツ_/“”

范例

长话短说

ExecuteAsync签名的区别如下

// this just expects a task, which can be supplied with an async lamda
public Task ExecuteAsync(Func<Task> action)

然而,当您使用OrResult时,没有这种过载,这是有道理的。如果您没有提供结果,Polly将无法检查结果。

请在配置策略的地方发布您的整个函数以及整个编译器错误消息。我认为编译错误在另一行。是否重新生成?@user989988您只需在ExecuteAsync的委托末尾添加以下语句:return httpResponse;。请在配置策略的地方发布整个函数,以及整个编译器错误消息。我认为编译错误在另一行。是否重新生成?@user989988您只需在ExecuteAsync的委托末尾添加以下语句:return httpResponse;。
// this expects a task<T> and needs a return value
public Task ExecuteAsync(Func<Task<HttpResponseMessage>> action)
await policy.ExecuteAsync(async () =>
{
    httpResponse = await _graphClient.HttpProvider.SendAsync(batchRequest);
});