【发布时间】:2016-09-06 19:13:59
【问题描述】:
我正在尝试创建一个与此类似的全局异常方法,以便显示异常以及在异常之前可能已捕获的任何数据
public class ServiceResponse<T> {
public T Data {get;set;}
public List<Exception> Errors {get;set;}
}
public static ServiceResponse<T> GetServiceResponse<T>(this ServiceResponse<T> response, Action<T> action)
{
try
{
action(response.Data);
}
catch (Exception ex)
{
if (response.Errors == null)
{
response.Errors = new List<Error>();
}
response.Errors.Add(ex);
}
return response;
}
它会被这样调用:
await Task.WhenAll(myTask1, myTask2).ContinueWith(t =>{ /*this is needed */ });
var response = new ServiceResponse<myData>();
response = response.GetServiceResponse(async r =>
{
var info= await myTask1;
r.Status= info.status;
r.Timeout = info.Timout;
})
.GetServiceResponse(async r => { r.Hybrid = await myTask2; });
问题是当Task1 或Task2 发生异常时,它永远不会被GetServiceResponse 方法的catch 捕获。
【问题讨论】:
-
您有一个实际上是
Func,而不是Action的“操作”,并且您的委托返回一个您刚刚放在地板上的值,这应该是一个非常危险的信号.任何时候你只是在地板上丢掉价值,很有可能出现问题,就像这里的情况一样。 -
Func
是一个错字。
标签: c# exception lambda error-handling