【问题标题】:How to use async to execute callback delegate如何使用异步执行回调委托
【发布时间】:2017-02-11 15:39:12
【问题描述】:

我有一个回调函数,它需要几秒钟的时间来处理,应该是一个异步方法,但是我找不到通过 await 执行这个异步回调的方法,因为它必须是调用方法中的一个 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);}

对不起,我的英语很差,有什么想法吗?谢谢!

【问题讨论】:

    标签: c# callback async-await


    【解决方案1】:

    您将不得不等待第一次调用本身。

    改变

    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");
        }
    }
    

    这是输出

    【讨论】:

    • 是的,我错过了,它是正确的,但是我如何在“DoSomething”方法中等待“回调”?
    • (new Test()).Main(); 替换为(new Test()).Main().Wait();
    猜你喜欢
    • 2015-08-17
    • 2023-03-24
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多