4
在阅读recent MSDN Magazine article about the Task scheduler之后,我希望(并且实际上非常激动)使用它会有利于我使用WCF生成的代理。有没有一种有效的方式来使用WCF服务代理System.Threading.Tasks?
我希望能得到一些具有以下优点:
- 1)有能力中断运行WCF操作(我不期待这个停止服务器上的操作 - 我就像能够发出'我不想要这个任务的结果'一样,这在用户界面中特别常见,因为有人会重复选择触发服务调用的网格项)
- 2)启动一个任务,而不是当它被创建时 - 我不知道我真的需要这个,我只是觉得它可能是很好的生成一个任务,而不是立即运行它。毕竟我认为这是完成任务的重点。
- 3)绑定属性 - 所以我可以绑定我的WCF用户界面到
IsCompleted
,让Task类从我的用户界面抽象出操作的内部。 - 4)有能力操作的抽象掉运行 - 嘲讽,等等等等,未来重构等
但是 - 我似乎并没有得到任何的这些好处。
- 1)在任务中没有中止功能 - 这让我觉得很奇怪。
- 2)我可以与
Task.Factory.FromAsync<>
一起工作的唯一过载是下面显示的那个。这会立即开始执行web服务操作(如Fiddler中所示),并且不会让我稍后再开始通话。 - 3)任务不执行
INotifyPropertyChanged
,所以我不能将它绑定到用户界面。 - 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
});
作为您正在查找的中止功能与任务中的取消功能之间的区别,您会看到什么? – 2010-09-13 02:57:50
@john - 完全一样 - 但没有Cancel()方法。有一个IsCancelled方法,但没有Cancel()。虽然我现在看到,我可以取消使用取消令牌http://msdn.microsoft.com/en-us/library/dd997364.aspx – 2010-09-13 03:04:24
CancellationToken是做取消的方法。 – 2010-09-13 03:05:59