在阅读了最近一篇关于任务调度程序的 MSDN 杂志文章后,我希望(并且实际上非常兴奋)使用它会有益于我使用 WCF 生成的代理。
我希望获得以下一些好处:
- 1)能够中止正在运行的 WCF 操作(我不希望这会停止服务器上的操作 - 我只是希望能够发出信号'我不想要此任务的结果'。这是在 UI 中尤其常见,其中有人从触发服务调用的网格中重复选择项目。)
- 2) 能够在创建任务之外的某个时间点启动任务——我不确定我是否真的需要这个,我只是认为生成一个任务而不是立即运行它可能会很好。毕竟我认为这就是任务的全部意义所在。
- 3) 可绑定属性——因此我可以将我的 WCF UI 绑定到
IsCompleted
并让 Task 类从我的 UI 中抽象出操作的内部结构。 - 4)能够抽象出操作的运行- 模拟,等等等等,未来的重构等。
但是 - 我似乎没有得到任何这些好处。
- 1)Task 中没有中止功能——这让我觉得很奇怪。
- 2)我可以使用的唯一重载
Task.Factory.FromAsync<>
是下面显示的重载。这会立即开始执行 web 服务操作(如 Fiddler 中所示),并且不允许我稍后开始调用。 - 3) 任务没有实现
INotifyPropertyChanged
,所以我无法将它绑定到 UI。 - 4)鉴于其他3个好处没有发生,这个有点死在水中:-(
Sooo .... 我只是在浪费时间试图让 WCF 生成的代理与任务一起工作——还是我错过了一些东西。
// WCF client
var client = new ShoppingCartClient();
// create task
var t = Task.Factory.FromAsync<GetOrderDetailsMsgOut>(
client.BeginGetOrderDetails(new GetOrderDetailsMsgIn()
{
OrderId = 12345
}, null, null),
client.EndGetOrderDetails);
t.ContinueWith(x =>
{
var order = x.Result.Order;
// do something with order
});