How can I abort the execution of a method if its taking too long to run?
e.g.
string foo = DoSomethingComplex(); but if DoSomethingComplex() is taking too long (20 seconds lets say). then just set foo to "";
How can I abort the execution of a method if its taking too long to run?
e.g.
string foo = DoSomethingComplex(); but if DoSomethingComplex() is taking too long (20 seconds lets say). then just set foo to "";
You can create a new thread running your method, then:
thread.Start(); bool success = thread.Join(20000); Join returns true if thread finished successfully before designated time. Obviously, would not abort the method (probably no way to do that directly), but the thread -- but it seems that would accomplish what you desired.
A simple threading code example probably would go something like below. Note I made some assumptions about signature with parameter, all this in some class, etc. For method:
public string DoSomethingComplex(int param) and then in the same class:
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); } usage aka code in some other method in ClassFooIsIn:
var thread = new Thread(() => ThreadedDoSomethingComplex(this, param, ThreadedDoSomethingComplexEnded)); thread.Start(); if (!thread.Join(20000)) { foo = ""; } Foo should be initialized before above shown usage, so in reality you could possibly skip foo = ""; line.
Create a separate thread for DoSomethingComplex and wait for completion of the operation in the main thread: