在另一个任务中等待任务

本文关键字:任务 等待 另一个 | 更新日期: 2023-09-27 18:27:31

我正在开发一个C#控制台应用程序,该应用程序将负责运行一系列任务。其基本结构如下:

var tasks = workItems.Select(x => Task.Factory.StartNew(() =>
{
    DoSomeWork(x);
})).ToArray();
Task.WaitAll(tasks);

问题是DoSomeWork()是一个异步方法,它等待另一个任务的结果,该任务还需要等待对Facebook API的调用。http://facebooksdk.net/docs/reference/SDK/Facebook.FacebookClient.html#GetTaskAsync(字符串)

public async void DoSomeWork(WorkItem item)
{
    var results = await GetWorkData();
}
public async Task<List<WorkData>> GetWorkData()
{
    var fbClient = new FacebookClient();
    var task = fbClient.GetTaskAsync("something");
    var fbResults = await task;
};

我原以为可以通过调用Task.WaitAll()来支持嵌套任务的概念,但父任务的执行几乎立即完成。在应用程序的末尾放一个Console.ReadLine()以防止它提前执行,这表明结果确实会在稍后从Facebook返回。

我是否遗漏了一些明显的内容,或者是否有更好的方法来阻止我的任务集合,以允许这种情况?

在另一个任务中等待任务

DoSomeWork不需要返回void。由于不返回Task,调用者无法知道if何时结束。

此外,它已经是异步的,所以没有理由在这里使用StartNew。只需直接调用DoSomeWork,因为它应该返回一个Task