Search code examples
c#.netlambda

Best way to call a single operation at some time in the future?


I want to fire off a timer to execute once at some point in the future. I want to use a lambda expression for code brevity. So I want to do something like...

(new System.Threading.Timer(() => { DoSomething(); },
                    null,  // no state required
                    TimeSpan.FromSeconds(x), // Do it in x seconds
                    TimeSpan.FromMilliseconds(-1)); // don't repeat

I think it's pretty tidy. But in this case, the Timer object is not disposed. What is the best way to fix this? Or, should I be doing a totally different approach here?


Solution

  • This will accomplish what you want, but I am not sure its the best solution. I think its something that short and elegant, but might be more confusing and difficult to follow than its worth.

    System.Threading.Timer timer = null;
    timer = new System.Threading.Timer(
        (object state) => { DoSomething(); timer.Dispose(); }
        , null // no state required
        ,TimeSpan.FromSeconds(x) // Do it in x seconds
        ,TimeSpan.FromMilliseconds(-1)); // don't repeat