2017-02-11 61 views
0

我有一个回调函数需要花费几秒钟来处理,并且应该是一个异步方法,但我无法找到一种方法来执行此异步回调等待,因为它必须是调用方法中的委托参数。 下面是一些代码片段:如何使用异步来执行回调委托

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

对不起,我的英语不好,任何想法要做到这一点?谢谢!

回答

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

+0

是的,我很怀念它,它是正确的,但我怎么能在 “DoSomething的” 方法等待 “回调”? – hellojiaru

+0

谢谢,它的作品!我在代码中做了错误... – hellojiaru

+0

用'(new Test())。Main()。Wait();'替换'(new Test())。 –