无法从Task.Factory.FromAsync捕获响应

时间:2017-08-14 16:39:42

标签: c# sql

我有这个对象

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);

我错过了什么?

2 个答案:

答案 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;