Providing Synchronous and Asynchronous Versions of Method in C#
.net, asynchronous, c#
Solution
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);
}
Problem
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?