获取异步方法体中的当前Task实例

如果我有一个像这样的异步方法体 –

public async Task GetSomething() { await SendText("hi"); await SendImage("bla.bmp"); } 

在等待启动时​​,如何在将Task对象返回给用户之前获取该对象

即..

 public async Task GetSomething() { myTasks.Add(Task.Current); await SendText("hi"); await SendImage("bla.bmp"); //some processing } 

所以我可以做的其他地方

  await Task.WhenAll(myTasks); Console.WriteLine("All tasks complete"); 

这样我就可以在关机前等待所有任务完成

这不是直接可能的,因为该语言没有访问“当前”任务的工具。

但有一种解决方法:在另一种方法中包装异步方法。 一旦异步方法返回(这大约发生在第一个等待点),这个其他方法可以获取任务。

在所有情况下,我建议让调用者将异步任务添加到列表中,而不是异步方法本身。 即使从封装的角度来看,这也很有用。