public async Task TestMethod1()
{
var executor = GetExecutor(typeof(TestHandler), typeof(FileStream), typeof(TestHandler).GetMethod("Handle2"));
var voidExecutor = GetExecutor(typeof(TestHandler), typeof(FileStream), typeof(TestHandler).GetMethod("Handle"));
var asyncExecutor = GetExecutor(typeof(TestHandler), typeof(FileStream), typeof(TestHandler).GetMethod("Handle2Async"));
object res = executor(new TestHandler(), new FileStream(@"d:\ssor.doc", FileMode.Open));
object voidRes = voidExecutor(new TestHandler(), new FileStream(@"d:\ssor.doc", FileMode.Open));
Task resAsync = (Task)asyncExecutor(new TestHandler(), new FileStream(@"d:\ssor.doc", FileMode.Open));
await resAsync;
string result = (string) GetTaskResult(resAsync);
}