案例:
我正在对遗留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行后,它会“停止”或不返回主线程或其他东西。
怎么办?