我有以下的异步代码:执行异步代码同步
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 – Andrey