[英]Method to handle exceptions in a async block to cannot convert return object to to async method return type
我已经实现了一种处理异步块周围异常的方法,如下所示:
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语句有一个错误:无法将表达式类型ServiceResponse转换为异步方法返回类型ServiceResponse。
任何线索如何解决这个问题?
您对RetryTest
定义接受一个T
,然后返回ServiceResponse<T>
调用它时,您提供了: ServiceResponse<DataJob>
作为T
,因此RetryTest
的返回类型需要将T
包装在ServiceResponse
,因此应返回ServiceResponse<ServiceResponse<DataJob>>
而不是ServiceResponse<DataJob>
。 (您没有返回该值,因此出现了错误。)
您只想将DataJob
作为通用参数传递给RetryTest
而不是ServiceResponse<DataJob>
。
或者,更好的是,只需在调用RetryTest
时完全删除泛型参数,然后正确推断出它们,然后您就可以将其弄乱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.