【发布时间】:2014-04-13 00:50:12
【问题描述】:
例如,假设我正在编写一个具有以下签名的方法(C#4 所以没有异步关键字):
public Task Refresh();
它将调用一个方法(也返回一个Task)来执行通信工作,然后运行一个任务继续以根据检索到的数据更新一些内部状态。例如:
public Task Refresh()
{
Task<MyData> commsTask = datasource.LoadData();
Task handleDataTask = commsTask.ContinueWith( HandleNewData );
return ?;
}
如果我返回 handleDataTask,它的完成状态会正确跟踪“刷新”操作的结果,但它不会正确报告它的启动状态。
我可以将两者都包装在一个新的 Task.Factory.StartNew 中并将它们创建为子任务,但是为了链接一些任务延续而设置一个新线程似乎很浪费。
肯定有一种简洁有效的方法可以用 TPL 做到这一点吗?
【问题讨论】:
-
为什么要关心国家?
-
这样实现匹配方法签名的隐式文档?我不知道,问我方法的消费者。
Task.Status属性可能有 100 种可能的用途,我所知道的是我的方法应该返回一个正确遵循其文档的Task。
标签: c# .net-4.0 task-parallel-library