如何在异步方法调用中传递异步方法委托?

时间:2018-04-16 04:15:30

标签: asynchronous delegates

我有两种异步方法:

 private async Task<string> Method_1_Async(string parameter)
        { return await LongRunningFunction_1();} 
 private async Task<string> Method_2_Async(string parameter)
        { return await LongRunningFunction_2();}

我需要在第三个异步方法中调用它们,将方法名称作为参数传递。像这样:

public  async Task<string> Method_3_Async(DelegateMethodClass methodName, string parameter)
        { return await methodName(parameter);}

如何宣布DelegateMethodClass?感谢。

1 个答案:

答案 0 :(得分:0)

async函数与其他函数的方法签名相同 - 代码中指定的返回类型以及自定义委托的基础参数的类型和顺序类似......

private delegate Task<string> MyAsyncFunction(string parameter)

或使用其中一种通用通用委托类型,例如Func<string, Task<string>>

在你的情况下,你可以这样做:

public async Task<string> Method_3_Async(Func<string, Task<string>> methodName, string parameter)
{
    return await methodName(parameter);
}

此特定情况可以简化为不使用asyncawait,因为您实际上并未对返回的值执行任何操作或等待该任务之前的任何操作,但我认为您的实际实施更复杂。