【问题标题】:Http PostAsync without Execution没有执行的 Http PostAsync
【发布时间】:2018-07-05 00:13:28
【问题描述】:

我正在做一个非常简单的项目,我正在尝试构建一个任务列表, 准确地说是 HttpPost 任务列表。

我有以下发布数据的方法:

 public Task<HttpResponseMessage> PutAsyncJson<T>(string uri, T o)
 {
    return this.PutAsync<T>(uri, o, new JsonMediaTypeFormatter() { SerializerSettings = JsonSettings });
 }

其中 PutAsync 是 .NET HttpClient 的基本方法

现在我只是将任务放在一个列表中,因此我使用以下代码:

List<Task<HttpResponseMessage>> tasks = new List<Task<HttpResponseMessage>>();
List.Add(PutAsyncJson("url", obj1));
List.Add(PutAsyncJson("url", obj2));

在所有任务都添加到列表后,我希望它们以串行方式执行。 我现在的问题是当我将它们添加到列表时任务已经执行。 为什么他们已经在那里被处决了?

【问题讨论】:

标签: c# list asynchronous task


【解决方案1】:

这就是Tasks 的工作方式;他们立即开始执行。如果您想推迟任务的执行,您可以考虑创建一个任务列表creator 委托:

var tasks = new List<Func<Task<HttpResponseMessage>>> {
    () => PutAsyncJson("url", obj1),
    () => PutAsyncJson("url", obj2)
};

【讨论】:

  • 您认为link I gave 不是正确的副本?
  • 好的,我认为只有在等待它们或请求 .Result 属性时才会开始
  • @DavidG:问题的本质似乎是为什么任务立即开始运行,而不是如何按顺序运行。
  • 句子在所有任务都被添加到列表中后,我希望它们以串行方式执行 暗示否则。无论如何,这个副本可以实现这两件事。
  • @ManuelBleimuth:是的,这是一个常见的误解。访问.Result 所做的只是确保任务的所有异步部分完成并恢复线程的执行。
猜你喜欢
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 2019-03-06
  • 1970-01-01
  • 2017-08-11
相关资源
最近更新 更多