我正在寻找实现通用方法的好主意,让一行(或匿名委托)代码执行超时.
TemperamentalClass tc = new TemperamentalClass();
tc.DoSomething(); // normally runs in 30 sec. Want to error at 1 min
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个可以在我的代码与气质代码交互的许多地方(我无法改变)优雅地实现的解决方案.
另外,如果可能的话,我想让违规的"超时"代码停止执行.
我有几种类似的方法,例如.CalculatePoint(...)和CalculateListOfPoints(...).有时,它们可能不会成功,并且需要向呼叫者指出这一点.对于返回通用List的CalculateListOfPoints,我可以返回一个空列表并要求调用者检查这个; 但是Point是一个值类型,所以我不能在那里返回null.
理想情况下,我希望这些方法"看起来"相似; 一种解决方案可能是将它们定义为
public Point CalculatePoint(... out Boolean boSuccess);
public List<Point> CalculateListOfPoints(... out Boolean boSuccess);
Run Code Online (Sandbox Code Playgroud)
或者返回一个点?对于CalculatePoint,并返回null以指示失败.这意味着必须回归到非可空类型,这似乎是过度的.
另一种方法是返回布尔boSuccess,将结果(Point或List)作为'out'参数,并将它们称为TryToCalculatePoint或其他...
什么是最佳做法?
编辑:我不想使用Exceptions进行流量控制!有时候会失败.
我System.ComponentModel.BackgroundWorker在我的WPF应用程序中使用.
如何设置超时了BackgroundWorker?