BeginInvoke
の後にコールバックを開始し、AsyncResult.AsyncDelegate
適切なタイプにキャストする必要がEndInvoke
あります。そうして初めてアクセス可能になります。
しかし、私はジェネリックスを使用しているので、N個の一般化されたメソッドに対してN個のコールバックを定義する必要がありますか?
これはクラスです:
public class Async
{
public delegate object Func(); //void with no parameter
public delegate TResult Func<T, TResult>(T arg); //one parameter with result
public static void Execute(IAsyncSubscriber subscriber, Func action)
{
action.BeginInvoke(Callback, subscriber);
}
public static void Execute<T, T1>(IAsyncSubscriber subscriber, T param, Func<T, T1> action)
{
action.BeginInvoke(param, Callback, subscriber);
}
private static void Callback(IAsyncResult ar)
{
AsyncResult result = (AsyncResult)ar;
IAsyncSubscriber subscriber = (IAsyncSubscriber)result.AsyncState;
Func action = (Func) result.AsyncDelegate;
object returnValue = action.EndInvoke(result); //To call endinvoke
subscriber.Callback(returnValue);
}
}