2017-08-31 43 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是的。 –