例如,假设我正在编写一个具有以下签名的方法(C#4 所以没有异步关键字):
public Task Refresh();
它将调用一个方法(也返回 a Task
)来执行通信工作,然后运行任务继续以根据检索到的数据更新一些内部状态。例如:
public Task Refresh()
{
Task<MyData> commsTask = datasource.LoadData();
Task handleDataTask = commsTask.ContinueWith( HandleNewData );
return ?;
}
如果我返回handleDataTask
它的完成状态正确跟踪“刷新”操作的结果,但它没有正确报告它的启动状态。
我可以将它们包装在一个Task.Factory.StartNew
新线程中并将它们创建为子任务,但是为了链接一些任务延续而设置一个新线程似乎很浪费。
使用 TPL 确实有一种简洁有效的方法吗?