如何为繁忙的方法+ C#设置超时。
最佳答案
好的,这是真正的答案。
...
void LongRunningMethod(object monitorSync)
{
//do stuff
lock (monitorSync) {
Monitor.Pulse(monitorSync);
}
}
void ImpatientMethod() {
Action<object> longMethod = LongRunningMethod;
object monitorSync = new object();
bool timedOut;
lock (monitorSync) {
longMethod.BeginInvoke(monitorSync, null, null);
timedOut = !Monitor.Wait(monitorSync, TimeSpan.FromSeconds(30)); // waiting 30 secs
}
if (timedOut) {
// it timed out.
}
}
...
这结合了使用C#的两个最有趣的部分。首先,要异步调用该方法,请使用具有花哨的裤子
BeginInvoke
魔术的委托(delegate)。然后,使用监视器将消息从
LongRunningMethod
发送回ImpatientMethod
,以告知它何时完成,或者如果在一定时间内没有收到消息,则放弃它。(p.s.-只是在开 Jest ,这才是真正的答案。我知道有2 ^ 9303种方法可以使猫皮毛。尤其是在.Net中)