Search code examples
c#.netasynchronousdelegatesiasyncresult

How to create an IAsyncResult that immediately completes?


I am implementing an interface which requires implementations of BeginDoSomething and EndDoSomething methods. However my DoSomething isn't really long-running. For simplicity assume DoSomething only compares two variables and return whether a > b

So my BeginDoSomething should be like:

protected override IAsyncResult BeginDoSomething(int a, int b, AsyncCallback callback, object state)
{
     bool returnValue = a > b;
     return ...; //what should I return here?  
     //The method actually already completed and I don't need to wait for anything
 }

I don't know what I should return. I only implement BeginDoSomething because I have to, not because my method is long-running. Do I need to implement my own IAsyncResult? Is there an implementation already in .NET libraries?


Solution

  • The quick hack way of doing it is to use a delegate:

    protected override IAsyncResult BeginDoSomething(int a, int b, AsyncCallback callback, object state)
    {
         bool returnValue = a > b;
         Func<int,int,bool> func = (x,y) => x > y;
         return func.BeginInvoke(a,b,callback,state);
    }
    

    The downside of this approach, is that you need to be careful if two threads will be calling this method concurrently you'll get an error.