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

本文关键字:Task 实例 获取 异步方法 | 更新日期: 2023-09-27 17:53:11

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

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

当等待开始时,我如何在任务对象返回给用户之前获得它

ie . .

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

这样我就可以等待所有任务完成后再关闭

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

这是不可能直接实现的,因为该语言没有访问"当前"任务的功能。

有一个解决方法:将async方法包装在另一个方法中。这个other方法可以在异步方法返回时(大约发生在第一个等待点)获得任务。

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