我已经实现了一种处理异步块周围异常的方法,如下所示: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>时完全删除泛型参数,然后正确推断出它们,然后您就不会搞砸了。关于c# - 处理异步块中的异常的方法无法将返回对象转换为异步方法返回类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30334275/
10-09 14:30