C# 并非所有代码路径都在lambda表达式中返回值
这是我的代码: var策略=策略 手柄 .RetryAsync1; httpResponse消息httpResponse=null; 等待策略。ExecuteAsyncasync=> { httpResponse=await_graphClient.HttpProvider.SendAsyncbatchRequest; }; 这很有效。我将代码修改为: var策略=策略 手柄 .OrResultr=>r.StatusCode==HttpStatusCode429 .RetryAsync1; 然后返回此错误: 并非所有代码路径都在Func类型的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; 然后
简而言之,为了让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);
});