我一直在尝试了解如何基于新的 .NET 4.5 CancellationToken 机制来实现 WCF 调用取消。我发现的所有示例都不是基于 WCF 的,并且不跨越服务边界。
我的服务:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MyService : IMyService
{
public void LongOperation()
{
// do stuff that takes ages...
// please cancel me!
}
}
我的客户(桌面应用程序):
使用自动生成的代理:
private async void DoLongRunningTaskAsync()
{
var asyncTask = _myService.LongOperationAsync();
await asyncTask;
}
如何取消此任务?请提供适用于 .NET 4.5+ 上的 WCF 的具体示例
编辑:
下面的答案似乎表明由于技术原因这是不可能的。所以,想象一下,我创建了我的服务ContextMode=Session
,然后设置了一个静态变量(在单独的服务调用中)调用cancellationPending=true
,我的原始调用在这个阶段仍在运行,它会定期检查该变量。我还是不能取消吗?这仍然是不可能的吗?如果是这样,为什么?