【发布时间】:2018-08-08 15:43:01
【问题描述】:
我有一个控制台应用程序,它作为调度程序运行,同样使用一个 Web API,并且有两个部分,如下所述
- 将文件发布到 API - 我将一些文件发送到 API 以获取 文件中的一些信息。
- 从 API 获取响应 - 我接收响应的位置 来自我之前已经发送到 API 的 API。
所以流程如下。当调度程序最初运行时,我将向 API 发送一些文件(例如 A、B 和 C)。 API 会花一些时间来处理文件。
所以下次调度程序运行时,它会发布更多文件 D、E、F 等,并尝试获取 A、B、C 的响应
代码骨架如下
static void Main(string[] args)
{
//"starting Posting files to API";
PostDatas(ds);
//"Getting Response from the API";
GetResponseXML(ds);
}
public static void PostDatas(DataSet ds)
{
var client = new HttpClient();
foreach (DataRow dr in ds.Tables[0].Rows)
{
//post the files
var response = client.PostAsync(URL, ReqClass, bsonFormatter).Result;
}
}
public static void GetResponseXML(DataSet ds)
{
var clientResponse = new HttpClient();
foreach (DataRow dr in ds.Tables[1].Rows)
{
//get the response.
var response = clientResponse.PostAsync(URL,ReqClass, bsonFormatter).Result;
}
}
}
这里所有的过程都是同步的,这导致了太多的时间。
我想进行发布过程并以异步方式获得响应。将多个文件一起发布并同时获得多个文件的响应
我怎样才能做到这一点?使用线程概念或使用异步和等待概念或 TPL(任务并行库)。我应该在上面的代码中执行哪些更改以使其异步工作。
请帮助提供样品。
【问题讨论】:
-
@Athul 删除对
.Result和.Wait()的所有调用,并改用await。将使用HttpClient的任何方法的签名更改为async Task -
这样可以实现并行处理吗? @Panagiotis Kanavos
-
@Liam : 怎么会导致死锁?
标签: c# multithreading asynchronous task-parallel-library threadpool