在ContinueWith方法中,任务WebRequest静默失败

时间:2016-03-18 15:28:46

标签: c# concurrency async-await task webrequest

我正在尝试使用控制台应用程序:

  1. 为一组项目启动并发任务
  2. 每个任务都会访问REST服务以检索项目(JSON)的当前信息
  3. 将第一次通话的结果发布到另一项服务以检索更新的详细信息
  4. 当每项任务完成时,我想将数据插入数据库。
  5. 我创建了一个使用ContinueWith()方法的任务列表。

    foreach (var instance in waveInstances)
    {
       getTasks.Add(firstService(instance, vendor).ContinueWith(t => secondService(t.Result), TaskContinuationOptions.AttachedToParent));
    }
    while (getTasks.Count > 0)
    {
        var firstFinishedTask = await Task.WhenAny(getTasks);
        getTasks.Remove(firstFinishedTask);       
        var instance = await firstFinishedTask;
    
        WriteToDb(instance);
    }
    

    我的问题出现在我在ContinueWith()中调用的secondService中。我的代码基本上看起来像:

    private async Task<taskData> filterForVendor(string json)
    {
       HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
       request.Method = "POST";
       request.Accept = "application/json";
       request.ContentType = "application/json";
    
       using (var streamWriter = new StreamWriter(request.GetRequestStream()))
       {
          streamWriter.Write(json);
          streamWriter.Flush();
          streamWriter.Close();
       }
       ...Continue to GetResponseString
    

    我使用完全相同的样式,但只在firstService中执行GET。我甚至尝试将该方法完全复制为测试但是在尝试GetRequestStream()时它仍然只是静默地结束,为什么这只发生在ContinueWith()部分?

0 个答案:

没有答案