Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 80579
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 10, 20262026-05-10T21:19:29+00:00 2026-05-10T21:19:29+00:00

I am looking for good ideas for implementing a generic way to have a

  • 0

I am looking for good ideas for implementing a generic way to have a single line (or anonymous delegate) of code execute with a timeout.

TemperamentalClass tc = new TemperamentalClass(); tc.DoSomething();  // normally runs in 30 sec.  Want to error at 1 min 

I’m looking for a solution that can elegantly be implemented in many places where my code interacts with temperamental code (that I can’t change).

In addition, I would like to have the offending ‘timed out’ code stopped from executing further if possible.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-10T21:19:30+00:00Added an answer on May 10, 2026 at 9:19 pm

    The really tricky part here was killing the long running task through passing the executor thread from the Action back to a place where it could be aborted. I accomplished this with the use of a wrapped delegate that passes out the thread to kill into a local variable in the method that created the lambda.

    I submit this example, for your enjoyment. The method you are really interested in is CallWithTimeout. This will cancel the long running thread by aborting it, and swallowing the ThreadAbortException:

    Usage:

    class Program {      static void Main(string[] args)     {         //try the five second method with a 6 second timeout         CallWithTimeout(FiveSecondMethod, 6000);          //try the five second method with a 4 second timeout         //this will throw a timeout exception         CallWithTimeout(FiveSecondMethod, 4000);     }      static void FiveSecondMethod()     {         Thread.Sleep(5000);     } 

    The static method doing the work:

        static void CallWithTimeout(Action action, int timeoutMilliseconds)     {         Thread threadToKill = null;         Action wrappedAction = () =>         {             threadToKill = Thread.CurrentThread;             try             {                 action();             }             catch(ThreadAbortException ex){                Thread.ResetAbort();// cancel hard aborting, lets to finish it nicely.             }         };          IAsyncResult result = wrappedAction.BeginInvoke(null, null);         if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds))         {             wrappedAction.EndInvoke(result);         }         else         {             threadToKill.Abort();             throw new TimeoutException();         }     }  } 
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 131k
  • Answers 131k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer ok on this page you'll find a solution but it's… May 12, 2026 at 6:10 am
  • Editorial Team
    Editorial Team added an answer Did you install both the updated module and the library?… May 12, 2026 at 6:10 am
  • Editorial Team
    Editorial Team added an answer The path least fiddly is likely: easy_install --no-deps Look at… May 12, 2026 at 6:10 am

Related Questions

I have two threads. The producer is producing pieces of data (String objects), where
I am looking for best practices to implement a TraceListener that will write logs
I would like to look at some examples of some good form layouts (web-based)
We have a large application mainly written in SQL Server 7.0, where all database

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.