如何在匿名委托中调用异步方法?

时间:2015-11-06 18:23:51

标签: c# async-await

我有一个函数将一个委托作为输入参数。

public delegate bool Callback();

public static class MyAPI
{
     public static handle(Callback callback) {
           ... 
     }
}

所以我用这样的匿名代表打电话给api

MyAPI.handle(delegate
{
    // my implementation
});

我的问题是如何在匿名委托中调用异步方法?

MyAPI.handle(delegate
{
    // my implementation
    await MyMethodAsync(...);
});

我收到一条错误消息,表示等待'等待'运算符只能在异步匿名方法中使用'?

函数MyAPI.handle()只期望非异步委托。我无法改变这种方法。我该如何解决我的问题?

谢谢。

3 个答案:

答案 0 :(得分:8)

您可以调用异步方法,传递异步lambda表达式:

MyAPI.handle(async () =>
{
    // my implementation
    await MyMethodAsync(...);
});

答案 1 :(得分:3)

MyAPI.handle(async () =>
{
    // my implementation
    await MyMethodAsync(...);
});

答案 2 :(得分:-1)

对于像我这样不太喜欢 lambda 外观的人的另一种解决方案。

MyAPI.handle(
    async delegate() {
        // my implementation
        await MyMethodAsync(...);
    }
);