我已经根据我在不同地方看到的东西创建了一个超时功能,但我很确定我做得不是很好!(但它似乎确实有效。)
我正在连接一个硬件,如果工作在几秒钟内连接,但如果不是,则需要大约 1 分钟才能超时。因此,如果我可以创建自己的超时功能,我可以将其设置为 20 秒,从而节省大量时间和等待时间。
我试图做到这一点,所以我的超时返回一个字符串:
static string CallWithTimeout(Action action, int timeoutMilliseconds)
{
string reply = "";
Thread threadToKill = null;
Action wrappedAction = () =>
{
threadToKill = Thread.CurrentThread;
action();
};
IAsyncResult result = wrappedAction.BeginInvoke(null, null);
if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds))
{
reply = "Connected";
wrappedAction.EndInvoke(result);
return reply;
}
else
{
threadToKill.Abort();
reply = "Error";
return reply;
}
}
然后我用类似的东西来称呼它:
string replyfromreader = CallWithTimeout(connectToHardware, 20000);
这connectToHardware
只是一个班轮,所以不需要张贴。