C# 是否有方法检测dispose中的异常?
我有以下情况:C# 是否有方法检测dispose中的异常?,c#,C#,我有以下情况: class Program { static void Main(string[] args) { try { using (new Foo()) { throw new Exception("Inside using block"); } } catch (Exception e)
class Program
{
static void Main(string[] args)
{
try
{
using (new Foo())
{
throw new Exception("Inside using block");
}
}
catch (Exception e)
{
}
}
}
public class Foo : IDisposable
{
public void Dispose()
{
throw new Exception("Inside dispose");
}
}
是否有可能在Foo
的Dispose
方法中获取抛出的异常-“Inside using block”
,并使其成为异常Inside Dispose
的内部异常
编辑:
例如:
class Program
{
static void Main(string[] args)
{
try
{
using (var fi = new FileHandler())
{
//open the file
fi.Open();
//write to the file
fi.Write();
//excption occurs
throw new Exception("Inside using block");
fi.Close();
}
}
catch (Exception e)
{
//now I only have the exception from the dispose but not the exception that occured in the using block itself
//I know I could wrap the code inside the using in a try/catch itself, just asking if it is possible without 2 try/catches
}
}
}
public class FileHandler : IDisposable
{
public void Dispose()
{
//Close the file
//for some reason it fails with an exception
throw new Exception("Inside dispose");
}
}
根据框架设计指南(Cwalina,Abrams),第9.3节:
避免从Dispose(bool)内部引发异常,除非在包含进程已损坏的关键情况下
如果Dispose可能引发异常,则最终不会执行块清理逻辑。为了解决这个问题,用户需要将每个要Dispose的调用(在finally块中!)包装到try块中,这会导致非常复杂的清理处理程序。如果执行Dispose(bool)方法,如果disposing为false,则永远不要抛出异常
第9.3节:
避免使类型可终结。仔细考虑任何你认为需要终结器的情况。从性能和代码复杂性的角度来看,使用终结器的实例会带来实际成本。”
根据框架设计指南(Cwalina,Abrams),第9.3节:
避免从Dispose(bool)内部引发异常,除非在包含进程已损坏的关键情况下
如果Dispose可能引发异常,则不会执行进一步的finally块清理逻辑。要解决此问题,用户需要将每个Dispose调用(在其finally块内!)包装在一个try块中,这会导致非常复杂的清理处理程序。如果执行Dispose(bool)方法,则如果disposing为false,则永远不会引发异常
第9.3节:
避免使类型可终结。仔细考虑需要终结器的任何情况。从性能和代码复杂性的观点来看,与终结器相关联的实际成本是存在的。
你想干什么?这听起来像是一个X-Y问题。不,这是怎么回事?根据框架设计指南(Cwalina,Abrams),第9.3节:“避免从Dispose(bool)中抛出异常”
除非在包含进程已损坏的关键情况下……如果Dispose
可能引发异常,则不会执行进一步的finally块清理逻辑。要解决此问题,用户需要将对Dispose
的每个调用都包装起来(在finally块内!)在一个try块中,这会导致非常复杂的清理处理程序。如果执行Dispose(bool)
方法,如果disposing
为false,则永远不要抛出异常。“@Amy如果这是一个答案,我将对此进行投票。@RandRandom也来自第9.3节:“避免使类型可终结。仔细考虑任何你认为需要终结器的情况。从性能和代码复杂性的角度来看,使用终结器的实例会带来实际成本。“你想做什么?这听起来像是一个X-Y问题。不,这是怎么回事?根据框架设计指南(Cwalina,Abrams),第9.3节:“避免从Dispose(bool)中引发异常。”
包含进程已损坏的关键情况除外。。。如果Dispose
可能引发异常,则最终不会执行块清理逻辑。为了解决这个问题,用户需要将对Dispose
(在finally块中!)的每个调用包装在try块中,这会导致非常复杂的清理处理程序。如果执行Dispose(bool)
方法,如果disposing
为false,则永远不要抛出异常。“@Amy如果这是一个答案,我将对此进行投票。@RandRandom也来自第9.3节:“避免使类型可终结”。仔细考虑任何你认为需要终结器的情况。从性能和代码复杂性的角度来看,使用终结器的实例会带来实际成本。“我告诉过你…:-)@ZoharPeled我很抱歉怀疑你:)我告诉过你…:-)@ZoharPeled我很抱歉怀疑你:)