我有以下的異步代碼:執行異步代碼同步
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