簡體   English   中英

異步方法調用是否應該在所有方法調用范圍內鏈接起來?

[英]Should async method calls chain up in all method calls scope?

我正在編寫一個 asp.net 核心 Web API,它使用另一個第三方 API 並將一些 JSON 響應返回給調用者,調用者將成為客戶端 Web 瀏覽器。 在以異步方式編寫我的實現時,visual studio 建議從我的以下異步方法中刪除 async await。

我只是想澄清一下,我不需要將這兩個方法包裝在 async await 中?

以下是方法:

public async Task<T> GetAsync<T>(string url)
{
    return  await GetResponse<T>(HttpMethod.GET,url);
}

public async Task<T> PostAsync<T>(string url, object payload)
{
    return await GetResponse<T>(HttpMethod.POST, url,payload);       
}

以下是上述兩種方法消耗的方法:

public async Task<T> GetResponse<T>(HttpMethod method,string url, object payload = null)
{
    System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();

    HttpResponseMessage response;

    switch (method)
    {
        case HttpMethod.POST:
        {
            var content = new StringContent(payload.ToString(), Encoding.UTF8, "application/json");
            response = await client.PostAsync(url, content).ConfigureAwait(false);
            break;
        }
        case HttpMethod.GET:
        default:
            method = HttpMethod.GET;
            response = await client.GetAsync(url).ConfigureAwait(false);
            break;
    }


   var responseMessageString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

   _logger.LogInformation($"{method.ToString()} {method.ToString()} {Environment.NewLine} Response: {responseMessageString}");

    return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(responseMessageString);
}

以下是 Visual Studio 的建議:

在此處輸入圖片說明

方法聲明中的異步和等待可能會被省略

我只是想澄清一下,我不需要將這兩個方法包裝在 async await 中?

那是正確的。 您可以信任 Visual Studio 和 ReSharper 提出的建議; 他們的建議非常保守。

在這種情況下,因為每個方法只是將參數傳遞給另一個方法並返回相同的內容,所以省略asyncawait是安全的。

但是,我不認為您必須這樣做。 消除關鍵字可以讓您(非常)輕微地提高性能。 但是,如果這些方法做了任何重要的事情——或者在未來被改變以做任何重要的事情——那么你會想要保留async / await關鍵字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM