首页 > 解决方案 > 从返回 Task 的异步方法中获取“字符串”在 C# 中

问题描述

我正在尝试从异步方法中获取一个字符串,该方法返回一个字符串作为任务字符串类型

我的代码:

 class DataScraper
    {
        private static readonly HttpClient client = new HttpClient();
      
       public static async Task<string> getParagraph()
        {
         
            string subject1 = "";
         
            string subject2 = "";
            Dictionary<string, string> parameters = new Dictionary<string, string>()
        {
            { "Subject1", subject1 },
            { "Subject2", subject2 }
        };
            try
            {
                string result = await PostHTTPRequestAsync("http://watchout4snakes.com/wo4snakes/Random/RandomParagraph", parameters);
                return await Task.FromResult(result);
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        private static async Task<string> PostHTTPRequestAsync(string url, Dictionary<string, string> data)
        {
            using (HttpContent formContent = new FormUrlEncodedContent(data))
            using (HttpResponseMessage response = await client.PostAsync(url, formContent).ConfigureAwait(false))
            {
                response.EnsureSuccessStatusCode();
                return await response.Content.ReadAsStringAsync().ConfigureAwait(false);
            }
        }
    }

在像这样的另一个类中使用它时:

 string s = DataScraper.getParagraph();

我收到一条错误消息:

Cannot implicitly convert type 'System.Threading.Tasks.Task<string>' to 'string'

标签: c#stringasynchronousasync-awaittask

解决方案


您的getParagraph方法具有Task<string>与您PostHTTPRequestAsync一样的返回类型,因此您可以尝试使用相同的方式处理它await(就像您在 中所做的那样string result = await PostHTTPRequestAsync(...)):

string s = await DataScraper.getParagraph();

也无需将结果包装到await Task.FromResult中,return result应该可以正常工作。

您还可以在文档中阅读更多使用 async 和 await 的异步编程。


推荐阅读