2017-02-11 8 views
0

処理に数秒かかるが、非同期メソッドである必要があるコールバック関数がありますが、この非同期コールバックを実行する方法が見つからないため、呼び出し側メソッドのDelegateパラメータ ここでは、コードのいくつかの部分である:私の下手な英語のためのコールバックデリゲートを実行するためにasyncを使用する方法

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(){ await DoSomething(Callback);} 

変更

async void Main(){ 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();と'(new Test())をMain()。Wait(); 'に置き換えてください。 –

関連する問題