【发布时间】:2023-07-26 21:06:01
【问题描述】:
我有以下异步代码:
public async Task<List<PreprocessingTaskResult>> Preprocess(Action onPreprocessingTaskFinished)
{
var preprocessingTasks = BuildPreprocessingTasks();
var preprocessingTaskResults = new List<PreprocessingTaskResult>();
while (preprocessingTasks.Count > 0)
{
//Wait till at least one task is completed
await TaskEx.WhenAny(preprocessingTasks.ToArray());
onPreprocessingTaskFinished();
}
return
}
以及异步使用代码
var preprocessingTaskResults = await Preprocess(someAction);
在某些情况下,我需要以同步方式调用它。对于更简单的情况(当异步方法只返回一个任务时),我曾经执行以下操作:
var someTask = AsyncMethod();
Task.Wait(someTask);
但我很困惑我应该如何在这里实现它。
【问题讨论】:
-
最好的解决方案实际上是根本不创建任务,只返回一些委托并直接调用它,这可以在 BuildPreprocessingTasks 中完成
标签: c# .net multithreading task-parallel-library