为什么 awaiter.IsCompleted 总是 return 错误?
why does awaiter.IsCompleted always return false?
我是 .NET 的新手,正在为 test.Right 编写程序,现在我正在使用 TaskAwaiter,当我从它的实例中获取 awaiter 时,它在 [=16= 上总是 returns false ] 而且我不知道为什么以及如何解决它?我用错了吗?
TaskAwaiter<HttpResponseMessage> awaiter;
str = "login.action";
awaiter = client.client.GetAsync(str).GetAwaiter();
if (awaiter.IsCompleted)
{
break;
}
Am I using it wrong?
您假设 HTTP 请求立即发生。不是这种情况。还得等着呢
在某些边缘情况下,被调用的异步方法可能不是异步的 - 即返回缓存结果 - 只有在这些情况下,您才会在调用后立即获得 IsCompleted = true。
您似乎没有正确的循环定义。
它应该是这样的:
TaskAwaiter<HttpResponseMessage> awaiter;
str = "login.action";
awaiter = client.client.GetAsync(str).GetAwaiter();
while (true)
{
if (awaiter.IsCompleted)
{
break;
}
}
或者这样写会更好:
while (!awaiter.IsComleted) {}
或者最好的做法是使用 async/await
关键字。例如:
public async Task YourMethodName()
{
...
str = "login.action";
HttpResponseMessage response = await client.client.GetAsync(str);
...
}
我是 .NET 的新手,正在为 test.Right 编写程序,现在我正在使用 TaskAwaiter,当我从它的实例中获取 awaiter 时,它在 [=16= 上总是 returns false ] 而且我不知道为什么以及如何解决它?我用错了吗?
TaskAwaiter<HttpResponseMessage> awaiter;
str = "login.action";
awaiter = client.client.GetAsync(str).GetAwaiter();
if (awaiter.IsCompleted)
{
break;
}
Am I using it wrong?
您假设 HTTP 请求立即发生。不是这种情况。还得等着呢
在某些边缘情况下,被调用的异步方法可能不是异步的 - 即返回缓存结果 - 只有在这些情况下,您才会在调用后立即获得 IsCompleted = true。
您似乎没有正确的循环定义。 它应该是这样的:
TaskAwaiter<HttpResponseMessage> awaiter;
str = "login.action";
awaiter = client.client.GetAsync(str).GetAwaiter();
while (true)
{
if (awaiter.IsCompleted)
{
break;
}
}
或者这样写会更好:
while (!awaiter.IsComleted) {}
或者最好的做法是使用 async/await
关键字。例如:
public async Task YourMethodName()
{
...
str = "login.action";
HttpResponseMessage response = await client.client.GetAsync(str);
...
}