如何对操作施加时间限制约束

时间:2011-04-13 09:46:37

标签: c# timeout

我有一个(可能)冗长的操作 a 我想要施加限制时间约束 t (以毫秒为单位)。如果 a 操作的完成时间小于 t 毫秒,那么我将从操作 a 返回答案。否则我想中止操作并返回一个正确的错误代码,说明超出了时间限制。

如何在C#中实现这一目标?如果您有其他与语言无关的想法,请随意分享?

4 个答案:

答案 0 :(得分:4)

最好是将其打包在Task<T>Task中并使用Wait

here

Task t = new Task(DoStuff());
t.Wait(1000);

答案 1 :(得分:1)

您可以启动两个线程:一个用于操作“a”,另一个用于计时器。

如果计时器线程结束,它将检查“a”操作线程是否已完成。如果没有,则中止(仍在运行)线程并返回超时错误代码。

如果操作“a”在计时器线程之前完成,只需在返回结果之前终止计时器线程。

答案 2 :(得分:0)

在方法上使用BeginInvoke,而不是在一段时间后检查IAsyncResult.IsCompleted。如果完成,请使用EndInvoke获取结果。

答案 3 :(得分:0)

有一些材料已经见Implement C# Generic Timeout

一般主题是有一个异步线程(委托,任务等)来关注时间。关于Thread.Abort()要非常小心,如果可以的话,你应该让任务继续运行,或者使用某种干净的取消。