从 C# 中返回任务的异步方法获取'string'<string>



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

我的代码:

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'

您的getParagraph方法的返回类型为Task<string>,与PostHTTPRequestAsync的返回类型相同,因此您可以尝试使用await(与string result = await PostHTTPRequestAsync(...)中的方法相同(来处理它:

string s = await DataScraper.getParagraph();

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

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

相关内容

最新更新