如果运行时间太长,如何中止方法的执行?
e.g.
string foo = DoSomethingComplex();
but if DoSomethingComplex()
花费的时间太长(比如说 20 秒)。
然后只需将 foo 设置为“”;
您可以创建一个运行您的方法的新线程,然后:
thread.Start();
bool success = thread.Join(20000);
如果线程在指定时间之前成功完成,Join 将返回 true。显然,不会中止该方法(可能没有办法做到that直接),但是线程 - 但似乎可以实现你想要的。
一个简单的线程代码示例可能如下所示。注意我对带参数的签名做了一些假设,所有这些都在某个类中,等等。对于方法:
public string DoSomethingComplex(int param)
然后在同一个班级:
public delegate void Callback(string newFoo);
public void ThreadedDoSomethingComplexEnded(string newFoo)
{
foo = newFoo;
}
private static void ThreadedDoSomethingComplex(ClassFooIsIn fooObject, int param, Callback callback)
{
var newFoo = fooObject.DoSomethingComplex(param);
callback(newFoo);
}
ClassFooIsIn 中其他方法中的用法又名代码:
var thread = new Thread(() => ThreadedDoSomethingComplex(this, param, ThreadedDoSomethingComplexEnded));
thread.Start();
if (!thread.Join(20000))
{
foo = "";
}
Foo 应该在上面显示的用法之前初始化,所以实际上你可以跳过 foo = "";线。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)