我有这个对象
public class ObjectList
{
public string idreturn { get; set; }
}
在使用Task.Factory.FromAsync
运行异步请求时,我无法捕获响应
foreach (var obj in ObjectList)
{
var wreq = (HttpWebRequest)WebRequest.Create(Convert.ToString(getURL));
var taskResp = Task.Factory.FromAsync<WebResponse>(wreq.BeginGetResponse, wreq.EndGetResponse, null);
taskResp.ContinueWith(tsk => new StreamReader(tsk.Result.GetResponseStream()).ReadToEnd().Trim())
.ContinueWith((Task<string> trs) => {
obj.idreturn = trs.Result.ToString();
});
}
return JsonHelper.JsonSerializer(ObjectList);
我错过了什么?
答案 0 :(得分:0)
您正在启动异步操作,然后在异步操作完成之前继续并序列化对象。
您应该ContinueWith
await
从[{1}}返回的值来获取结果,而不是使用FromAsync
,这样代码的其余部分将一直持续到请求之后已完成。如果您希望所有请求并行发生,您可以构建所有任务,然后await Task.WhenAll
在请求完成后运行序列化代码。
答案 1 :(得分:-1)
感谢James Manning在Getting the Response of a Asynchronous HttpWebRequest问题中的回答,我终于解决了这个问题。
var task = MakeAsyncRequest(getURL);
obj.smsidreturn = task.Result;