2017-08-31 17 views
4

私はこれをしました:タスクを返すメソッドで非同期メソッドを呼び出す方法は? SignalRハブで

public class MyHub : Hub 
{ 
    public override Task OnConnected() 
    { 
     // my async code here 
     return base.OnConnected(); 
    } 
} 

私は非同期コードを実行したいです。だから私はこのようasyncキーワードを追加しました:

public class MyHub : Hub 
{ 
    public override async Task OnConnected() 
    { 
     var result = await MyAsyncMethod(); 
     return base.OnConnected(); 
    } 
} 

しかしreturn base.OnConnected();はこのエラーを示しています

Since MyHub.OnConnected() is an async method that returns Task , a returned keyword must not be followed by an object expression. Did you intend to return Task<T> ?

私はそれを解決することができますか?ありがとう。

答えて

10

asyncのメソッドは、コンパイラによってステートマシンに変換されます。返されるTaskがコンパイラによって生成され、このメソッドの継続を表すため、Taskreturnここにはありません。

単にawaitbaseコール:

public override async Task OnConnected() 
{ 
    var result = await MyAsyncMethod(); 
    await base.OnConnected(); 
} 
+0

おかげで、それが働きました。私が間違っていないと、 'OnConnected()'は変更されず、依然として呼び出し元メソッドのタスクですか? – Blendester

+0

@Blendesterはい。 –

関連する問題