在 C# 中使用 Web 服务:删除 Task.Wait()
Consume a Web Service in C#: Remove Task.Wait()
我正在尝试使用网络服务。这是一项基于 XML 的服务。我的意思是 XML 格式的响应。代码工作正常。但是,我不想使用 task.Wait()。请告诉我如何用 async/await.
替换它
下面是我的代码:
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace ConsoleApp6
{
class Program
{
static void Main(string[] args)
{
Program obj = new Program();
var result = obj.GetData().Result;
}
public async Task<string> GetData()
{
string url =
"https://test.net/info.php?akey=abcd&skey=xyz";
HttpClient client = new HttpClient();
HttpResponseMessage response = client.GetAsync(url).Result;
var responseValue = string.Empty;
if (response != null)
{
Task task = response.Content.ReadAsStreamAsync().ContinueWith(t =>
{
var stream = t.Result;
using (var reader = new StreamReader(stream))
{
responseValue = reader.ReadToEnd();
}
});
task.Wait(); // How I can replace it and use await
}
return responseValue;
}
}
[XmlRoot(ElementName = "Info")]
public class Test
{
[XmlAttribute(AttributeName = "att")]
public string SomeAttribute{ get; set; }
[XmlText]
public string SomeText{ get; set; }
}
}
您已经处于 async
上下文中,因此只需使用 await
:
var stream = await response.Content.ReadAsStreamAsync();
using (var reader = new StreamReader(stream))
{
responseValue = reader.ReadToEnd();
}
也就是说,你应该检查你所有的电话:
HttpResponseMessage response = await client.GetAsync(url);
并使您的 main
异步,同时我们将方法设为静态:
public static async Task Main)
{
var result = await GetData();
}
你的方法签名在哪里:
public static async Task<string> GetData()
static
不是必需的,但是如果副作用尽可能小,您会发现并行 and/or 异步编程会容易得多。
你也可以制作 Main
method async
和 await
GetData
static async Task Main(string[] args)
{
Program obj = new Program();
var result = await obj.GetData();
}
我正在尝试使用网络服务。这是一项基于 XML 的服务。我的意思是 XML 格式的响应。代码工作正常。但是,我不想使用 task.Wait()。请告诉我如何用 async/await.
替换它下面是我的代码:
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace ConsoleApp6
{
class Program
{
static void Main(string[] args)
{
Program obj = new Program();
var result = obj.GetData().Result;
}
public async Task<string> GetData()
{
string url =
"https://test.net/info.php?akey=abcd&skey=xyz";
HttpClient client = new HttpClient();
HttpResponseMessage response = client.GetAsync(url).Result;
var responseValue = string.Empty;
if (response != null)
{
Task task = response.Content.ReadAsStreamAsync().ContinueWith(t =>
{
var stream = t.Result;
using (var reader = new StreamReader(stream))
{
responseValue = reader.ReadToEnd();
}
});
task.Wait(); // How I can replace it and use await
}
return responseValue;
}
}
[XmlRoot(ElementName = "Info")]
public class Test
{
[XmlAttribute(AttributeName = "att")]
public string SomeAttribute{ get; set; }
[XmlText]
public string SomeText{ get; set; }
}
}
您已经处于 async
上下文中,因此只需使用 await
:
var stream = await response.Content.ReadAsStreamAsync();
using (var reader = new StreamReader(stream))
{
responseValue = reader.ReadToEnd();
}
也就是说,你应该检查你所有的电话:
HttpResponseMessage response = await client.GetAsync(url);
并使您的 main
异步,同时我们将方法设为静态:
public static async Task Main)
{
var result = await GetData();
}
你的方法签名在哪里:
public static async Task<string> GetData()
static
不是必需的,但是如果副作用尽可能小,您会发现并行 and/or 异步编程会容易得多。
你也可以制作 Main
method async
和 await
GetData
static async Task Main(string[] args)
{
Program obj = new Program();
var result = await obj.GetData();
}