我已经实现了一个处理异步块异常的方法,如下所示:
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。
有任何线索如何解决这个问题?
答案 0 :(得分:4)
您对RetryTest
的定义接受T
,然后返回ServiceResponse<T>
当你调用它时,你提供了ServiceResponse<DataJob>
作为T
,因此返回类型为RetryTest
,因为它需要将T
包裹在ServiceResponse
中},应该返回ServiceResponse<ServiceResponse<DataJob>>
而不是ServiceResponse<DataJob>
。 (你没有回复,因此错误。)
您只想将DataJob
作为通用参数传递给RetryTest
而不是ServiceResponse<DataJob>
。
或者,更好的是,只需在调用RetryTest
时完全删除泛型参数并让它们正确推断,然后就不会搞砸了。