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

时间:2013-01-13 11:30:04

标签: c# .net asynchronous

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

public async Task GetSomething() {

    await SendText("hi");
    await SendImage("bla.bmp");

}

如果在await kicks in

中将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");

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

1 个答案:

答案 0 :(得分:6)

这不可能直接实现,因为该语言无法访问“当前”任务。

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

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