2016-05-29 120 views
0

請考慮這種操作方法:使用Task.FromResult創建異步操作

[HttpPost] 
public async Task RemoveUserFromGroups(string connectionId, List<string> groupNames, string pusherAddress) 
{ 
    var onlineUser = OnlineUser.Instance; 
    await OnlineBusiness.RemoveUserFromGroups(onlineUser.Id, onlineUser.CustomerId, onlineUser.IsTrader, connectionId, groupNames, pusherAddress); 
} 

而且這種方法:

public static Task<bool> RemoveUserFromGroups(int userId, int customerId, bool isTrader, string connectionId, List<string> groupNames, string pusherAddress) 
{ 
    return Task.FromResult(PusherBusiness.RemoveUserFromGroups(userId, customerId, isTrader, connectionId, groupNames, pusherAddress)); 
} 

PusherBusiness類的第三方庫,在類調用Web服務。 我想改變我的控制器爲異步mode.is這正確使用Task.FromResult並返回任務,然後等待它? 這是異步嗎?

回答

1

不,這根本不是異步的。

這將同步運行,創建一個任務,等待已完成的任務(同步完成)並繼續使用同一個線程。

爲了讓這是異步的,你需要一些實際上異步操作。例如,如果RemoveUserFromGroups調用Web服務,它應該異步執行並提供RemoveUserFromGroupsAsync或至少Begin/EndRemoveUserFromGroups

只要不提供重載,就沒有太多的事情可以實際執行異步操作。

+0

我有什麼辦法從我的代碼創建異步? –

+1

@ShahroozJafari你所有的代碼都使用依賴。只要這種依賴不支持異步,你就無法做到。 – i3arnon

+0

如果值得這樣做(Task.Run),你可以把它放到後臺作業。但不理想。 –