如何使用async来执行回调委托

时间:2017-02-11 15:39:12

标签: c# callback async-await

我有一个回调函数需要几秒钟来处理并且应该是一个异步方法,但我找不到一种方法来执行这个async回调,因为它必须是调用方法中的Delegate参数。 这是一段代码:

async Task Callback(){//do some callback..}
async Task DoSomething(Func<Task> callback){//I want to execute the callback like: await callback();}
async void Main(){ DoSomething(Callback);}

抱歉我的英语不好,有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

你必须等待第一次打电话。

更改

async void Main(){ DoSomething(Callback);}

async void Main(){ await DoSomething(Callback);}

之后它应该可以工作,我测试了你的示例代码。请在最后确认。

class Program
{
    static void Main(string[] args)
    {
       (new Test()).Main();
       Console.ReadKey();
    }
}

public class Test
{

    async Task Callback()
    {
        Console.WriteLine("I'm in callback");
    }
    async Task DoSomething(Func<Task> callback)
    {
        Console.WriteLine("I'm in DoSomething");
        await callback();
    }
    public async void Main()
    {
        Console.WriteLine("I'm in Main");
        await DoSomething(Callback);
        Console.WriteLine("Execution completed");
    }
}

这是输出

enter image description here