【发布时间】:2019-04-20 03:48:22
【问题描述】:
我正在尝试将一个字符串从我的 C# 应用程序发送到我的 php 服务器(第一次使用异步)。当我尝试写出我对控制台的回复时,我得到了这个:System.Threading.Tasks.Task'1[System.String]
C# 代码
private HttpClient request;
public async Task<string> licenseCheck(HttpClient client, string email){
var payload = new Dictionary<string, string>
{
{ "email", email }
};
var content = new FormUrlEncodedContent(payload);
var response = await client.PostAsync("https://example.io/checkin.php", content);
return await response.Content.ReadAsStringAsync();
}
request = new HttpClient();
Console.WriteLine(licenseCheck(request,"joe@example.com").ToString());
PHP 代码 - checkin.php
<?php
$email = trim(strtolower($_POST['email']));
header('Content-Type: application/x-www-form-urlencoded');
echo $email;
【问题讨论】:
-
为什么你等待
ReadAsStringAsync,但你不等待licenseCheck?简而言之:您不是在等待请求完成,而是在Task<string>对象上调用.ToString()。 -
正如我所说,我是
async的新手,很难理解它。大部分代码来自另一个 SO 帖子。 -
好吧,要从
async方法中得到结果,你必须await它,否则你得到Task。await会自动为你解包结果,解包错误等。 -
请参阅this question,但请记住,如果可以的话,您确实从顶部(到异步方法调用)一直使用 async/await。请注意,从 C#7 开始,您可以将 async Task Main 作为应用程序的入口点。如果你想学习 async/await,我推荐 Stephen Cleary's blog(以及众多 Stack Overflow 答案)。
标签: c# php async-await