当我使用 ReadAsStringAsync() 时,如何避免将我的方法设置为异步
本文关键字:我的 何避免 方法 设置 异步 ReadAsStringAsync | 更新日期: 2023-09-27 18:32:33
我正在开发一个带有C#和.NET Framework 4.0的库。
我有这种方法可以在 ASP.NET Web Api 2 Web服务上放置一些东西。
public async Task<string> PrepareAndStartv2(
string orderNumber,
string userName,
string systemName)
{
string uri =
string.Format(PrepareAndStartUri, orderNumber, userName, systemName);
string batchName = null;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(webApiHost);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpContent content = new StringContent(string.Empty, Encoding.UTF8, "application/json");
Task<HttpResponseMessage> response = client.PutAsync(uri, content);
HttpResponseMessage message = response.Result;
Task<string> task = message.Content.ReadAsStringAsync();
batchName = await task;
}
return batchName;
}
我添加了message.Content.ReadAsStringAsync()
以获取该方法返回的字符串。在那之后,我被迫到处Task<string>
、await
和async
。
有没有另一种选择可以在不使用await
、Task<string>
和async
的情况下读取HttpContent
中的字符串?
也许在这个等待的PrepareAndStartv2
方法中运行任务,我会用ReadAsStringAsync()
读取字符串。
您可以在调用异步方法后使用 Task.Result 来避免您自己的方法被强制异步:
public string PrepareAndStartv2(
string orderNumber,
string userName,
string systemName)
{
string uri =
string.Format(PrepareAndStartUri, orderNumber, userName, systemName);
string batchName = null;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(webApiHost);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpContent content = new StringContent(string.Empty, Encoding.UTF8, "application/json");
HttpResponseMessage message = client.PutAsync(uri, content).Result;
batchName = message.Content.ReadAsStringAsync().Result;
}
return batchName;
}