Thursday, October 21, 2010

Run synchronous process with a timeout

I have run into situations where the blocking call I'm making isn't guaranteed to terminate itself ever. I want control over how long I wait before giving up.

private static void RunSync(int timeout, Action toDo)
      Exception threadException=null;
      Action wait = ( ) =>
          toDo( );
        catch (Exception ex)
      var thread = new Thread(( ) => wait( ));
      thread.Start( );
      if (!thread.Join(timeout))
        thread.Abort( );
        throw new TimeoutException("No connection found within timeout:"+timeout/100+" seconds");
      if (threadException!=null)
        throw threadException;
This function is set up to wait for another multi-threaded class to try to find a connection and use it. If the timeouts on that class are set improperly or the threading code is bad and just never does a timeout or return, this gives me the option to stop waiting.

No comments:

Post a Comment