gpt4 book ai didi

c# - 处理异步 block 中异常的方法无法将返回对象转换为异步方法返回类型

转载 作者:太空宇宙 更新时间:2023-11-03 21:21:34 24 4
gpt4 key购买 nike

我已经实现了一种方法来处理异步 block 周围的异常,如下所示:

public async Task<ServiceResponse<T>> RetryTest<T>(Func<Task<ServiceResponse<T>>> method)
{
try
{
return await method.Invoke();
}
catch (Exception exception)
{
return FormatExceptionResponse<T>(exception);
}
}

并用它来包装异步代码,例如:

public async Task<ServiceResponse<DataJob>> Insert(DataJob entity)
{

return await RetryTest<ServiceResponse<DataJob>>(async () =>
{
Context.AddObject("DataJobs", entity);
DataServiceResponse responses = await Context.SaveChangesAsync();

return new ServiceResponse<DataJob>((HttpStatusCode)responses.Last().StatusCode, entity);

});

}

但是最后一个return语句有一个错误:Cannot convert expression type ServiceResponse to async method return type ServiceResponse。

知道如何解决这个问题吗?

最佳答案

您对 RetryTest 的定义接受 T然后返回 ServiceResponse<T>

当您调用它时,您已经提供了:ServiceResponse<DataJob>作为T , 所以 RetryTest 的返回类型,因为它需要包装 TServiceResponse , 应该返回 ServiceResponse<ServiceResponse<DataJob>>而不是 ServiceResponse<DataJob> . (你没有返回那个,因此错误。)

你只是想传递 DataJob作为 RetryTest 的通用参数而不是 ServiceResponse<DataJob> .

或者,更好的是,在调用 RetryTest 时完全删除通用参数并让它们被正确地推断出来,这样你就不会把事情搞砸了。

关于c# - 处理异步 block 中异常的方法无法将返回对象转换为异步方法返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30334275/

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