2017-10-17 98 views
3

大類完全異步兼容還是應該使用其他方法是一個好主意?異步:大類中的哪些實踐?

示例理解:

AsyncValidateUserInput.cs

public async Task<TaskStateHelper> CheckSiteIsReachable() 
public async Task<TaskStateHelper> VerifyCertificate() 
public async Task<TaskStateHelper> TestAccount() 
{ 
    #DoStuff 
    await exchangeAccount.FetchAccountInformation 
    #DoStuff 
    await exchangeAccount.GetAccountBalance 
    #DoStuff 
} 

GetAccountBalance是基於所述的AccountManager類:

AccountManager.cs

public async Task<decimal> GetAccountBalance() 
{ 
    #DoStuff 
    await FooAPI.GetAccountBalanceAsync() 
} 

FooAPI.cs

public async Task<Dictionary<string, decimal>> GetAccountBalanceAsync() 
{ 
    var queryResult = await QueryPrivateAsync("Balance"); 
    #DoStuff 
} 

private async Task<Stream> QueryPrivateAsync(string method, Dictionary<string, string> param = null) 
{ 
    #DoStuff 
    await postStream.WriteAsync(postData); 
    #DoStuff 
    await ReadFromStreamAsync(webResponse.GetResponseStream()); 
    #DoStuff 
} 

另一種方式是簡單地創建任務。

result = await Task.Factory.StartNew(exchangeAccount.GetAccountBalance); 

我是否使用Async規則兼容?

謝謝您的時間

+3

如果'GetAccountBalance'訪問外部資源,用'Task.Run'手動創建任務確實是錯誤的方法,這將簡單地浪費資源(線程) – Fabio

+0

爲什麼你懷疑異步方法的數量?你有沒有遇到一些問題? – Fabio

+0

更有趣的是什麼導致你問這個問題。 – Evk

回答