c#/。NET:如何并行执行同步调用列表?

时间:2018-02-08 11:44:19

标签: c# .net multithreading

案例:

我正在对遗留API进行编码,我有一个客户端库(.NET dll)。我需要多次联系API,比如3,但API非常慢且非异步,所以我想并行发送3个请求并继续执行我的线程,当所有3个请求都返回时。

早些时候用异步的东西做了这个,我会做这样的事情:

var tasks = someObjects.Select(o => _apiClient.DoSomeAsynchronousStuff(o));
await Task.WhenAll(tasks);

foreach (var executedTask in tasks) {
    var result = executedTask.Result;
}

但是现在我需要用非异步的东西来做。

我试过了:

var tasks = someObjects.Select(o => new Task<TResult>(() => _apiClient.DoSomeSlowThreadBlockingStuff(o)));
Task.WaitAll(tasks.ToArray());

foreach (var task in tasks)
{
    var result = task.Result;
}

我也尝试过在第一个例子中使用WhenAll。在所有情况下,在调试时,在我点击Task.WaitAll行后,它会“停止”或不返回主线程或其他东西。

怎么办?

0 个答案:

没有答案