【发布时间】:2013-09-03 16:17:29
【问题描述】:
我有一封使用网络请求获取不同部分(文本、html 和主题)的电子邮件。我希望程序同时获得它们以减少时间。我在下面写了一个我想要实现的简化版本。
public static async Task<MailMessage> GetEmailMessage(string subjectUrl, string bodyUrl)
{
var mailMessage = new MailMessage();
var subjectTask = new HttpClient().GetStringAsync(subjectUrl);
var bodyTask = new HttpClient().GetStringAsync(bodyUrl);
mailMessage.Subject = await subjectTask;
mailMessage.Body = await bodyTask;
return mailMessage;
}
我希望程序用于主题和正文,一旦两者都有,返回 MailMessage。
我是这个异步的新手,任何帮助将不胜感激。
=========解决方案=========
感谢@SLaks 让我意识到问题不在我的职能范围内。这就是我所说的方式。事实证明,就我而言(我认为是因为我返回的是引用类型而不是值类型),我必须先调用 Task.Result,然后它才会真正等待。
ie:这将不等待完成:
var mailMessage = GetEmailMessage("urlhere", "http://www.google.com");
但这会(注意“结果”被要求:
var mailMessage = GetEmailMessage("urlhere", "http://www.google.com").Result;
我希望这篇文章能帮助遇到同样问题的其他人。 编码愉快!
【问题讨论】:
-
您正在同步等待异步操作的结果。这很少是一个好主意。您应该将调用方法
async和await改为您的异步操作。
标签: c# .net-4.5 async-await