2017-08-31 44 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方法由編譯器轉換爲狀態機。你不能returnTask在這裏,因爲返回的Task是由編譯器生成的,代表繼續這個方法。

只需awaitbase電話:

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

謝謝,它的工作。如果我沒有弄錯,OnConnected()沒有改變,並且仍然是調用者方法的任務? – Blendester

+0

@Blendester是的。 –