我有一个(可能)冗长的操作 a 我想要施加限制时间约束 t (以毫秒为单位)。如果 a 操作的完成时间小于 t 毫秒,那么我将从操作 a 返回答案。否则我想中止操作并返回一个正确的错误代码,说明超出了时间限制。
如何在C#中实现这一目标?如果您有其他与语言无关的想法,请随意分享?
答案 0 :(得分:4)
答案 1 :(得分:1)
您可以启动两个线程:一个用于操作“a”,另一个用于计时器。
如果计时器线程结束,它将检查“a”操作线程是否已完成。如果没有,则中止(仍在运行)线程并返回超时错误代码。
如果操作“a”在计时器线程之前完成,只需在返回结果之前终止计时器线程。
答案 2 :(得分:0)
在方法上使用BeginInvoke,而不是在一段时间后检查IAsyncResult.IsCompleted。如果完成,请使用EndInvoke获取结果。
答案 3 :(得分:0)
有一些材料已经见Implement C# Generic Timeout
一般主题是有一个异步线程(委托,任务等)来关注时间。关于Thread.Abort()要非常小心,如果可以的话,你应该让任务继续运行,或者使用某种干净的取消。