问题描述
我无法使用下面的代码来执行此操作。我确定我在做些愚蠢的事情,寻找任何见解。
Console.Write("Doing Task...");
HttpClient web = new HttpClient();
Task<HttpResponseMessage> resp = web.GetAsync("http://localhost",HttpCompletionoption.ResponseContentRead);
resp.RunSynchronously(); //Doesn't Work
resp.Start(); //Doesn't Work
while (resp.Status != TaskStatus.RanToCompletion)
{
Write.Operation(".");
Thread.Sleep(500);
}
Console.Write("Done!");
解决方法
您为什么不使用异步/等待?从C#7.1开始,main方法可以声明为异步。
using System;
using System.Net.Http;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
Console.WriteLine("Doing Task...");
using HttpClient client = new HttpClient();
var resp = await client.GetAsync("http://localhost");
var content = await resp.Content.ReadAsStringAsync();
Console.WriteLine("Done!");
}
}
,
您可以像下面的示例一样使用async / await来捕获.NET Core中从服务器返回的所有数据:
m = "a - b - c"
n = "c - b"
flag = False
array = n.split()
for elem in array:
if elem not in m:
flag = True
if flag is True:
print("Not a sub string")
,
您的代码存在问题,因为您正在等待Task
的成功执行,但这可能永远不会发生。无论成功与否,您都需要等待其完成:
Console.Write("Doing Task...");
HttpClient httpClient = new HttpClient();
var task = httpClient.GetAsync("http://localhost");
while (!task.IsCompleted)
{
Console.Write(".");
Thread.Sleep(500);
}
task.Wait(); // observe any exceptions that may have occured
Console.WriteLine("Done!");
或者,您可以使用Wait
重载来接受超时。这实际上更好,因为可以立即观察任务的完成,而不是随机地延迟0-500毫秒。
while (!task.Wait(500))
{
Console.Write(".");
}
Console.WriteLine("Done!");