【发布时间】:2018-12-30 20:08:02
【问题描述】:
如果我有这样的异步方法体 -
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");
这样我就可以在关闭之前等待所有任务完成
【问题讨论】:
-
SendText和SendImage的签名是什么? -
没什么区别。这只是一些显示 GetSomething 执行多个子操作的虚拟代码。如果它更清楚,请用 Thread.Sleep(50000) 替换它们。
-
是的。方法可以返回
void、Task和Task<T>,如果是Task或者Task<T>可以重构代码。您可以获取任务对象并将它们添加到单个数组中。 -
但是我想要收集的不是内部任务,而是我想要的顶级任务。可能有 10 多个内部任务,我不希望每次开始时都将它们添加到列表中。那会很混乱。
标签: c# .net asynchronous