c#不能从匿名操作中捕获异常



我有一个应用程序,我在一个单独的线程上执行请求,同时显示一个等待表单。这是通过Request类执行Action对象来完成的。

现在我当然有一些错误处理逻辑,它似乎捕获错误两次,我不知道为什么。

这是Request类中的代码:

public virtual Tuple<string, string> ExecuteInternal()
{
ReturnValue<string> rv = new ReturnValue<string>();
try
{
Executor.Invoke(rv);
Response = rv.Value;
return new Tuple<string, string>("Success", Response);
}
catch (Exception ex)
{
//-----------this gets triggered and correctly returns the "Failure" Tuple
return new Tuple<string, string>("Failure", ex.ToString());
}
}

这是负责一个接一个执行请求的代码:

new Thread(() =>
{
foreach (Request request in Requests)
{
string response = "";
try
{
Tuple<string, string> result = request.ExecuteInternal();
string status = result.Item1;
response = result.Item2;
UpdateStatus(request, status);
}
catch (Exception ex)
{
//-------------------somehow this part gets also triggered
request.Response = ex.ToString() + "nnn" + response;
UpdateStatus(request, "Failure2");
}
}
}).Start();

现在如果我有一个异常在"Executor"这是一个动作,例如

Executor = () => { throw new Exception(); };

, Request类中的错误处理程序返回"Failure"元组,因此异常处理程序可以工作。但是线程内部的异常处理程序也以某种方式捕获了相同的异常,我不知道为什么。

我修复了它,"UpdateStatus"方法导致一些问题。

应该以用户友好的方式调用Request中负责错误处理的另一个Action,但是由于一个错别字,该变量没有初始化。现在可以正常工作了:)

我一行一行地调试所有的东西,然后用那种方式跟踪它。异常被重新抛出,因为错误处理程序没有如上所述初始化。

(这是我"继承"的一个相当大的项目,我还在适应…)

最新更新