I am writing an API in C# and I want to provide both synchronous and asynchronous versions of the publicly available methods. For example, if I have the following function:
public int MyFunction(int x, int y)
{
// do something here
System.Threading.Thread.Sleep(2000);
return x * y;
}
how can I create an asynchronous version of the above method (perhaps BeginMyFunction and EndMyFunction)? Are there different ways to achieve the same result, and what are the benefits of the various approaches?
The generic approach is to use a delegate
:
IAsyncResult BeginMyFunction(AsyncCallback callback)
{
return BeginMyFunction(callback, null);
}
IAsyncResult BeginMyFunction(AsyncCallback callback, object context)
{
// Func<int> is just a delegate that matches the method signature,
// It could be any matching delegate and not necessarily be *generic*
// This generic solution does not rely on generics ;)
return new Func<int>(MyFunction).BeginInvoke(callback, context);
}
int EndMyFunction(IAsyncResult result)
{
return new Func<int>(MyFunction).EndInvoke(result);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With