【发布时间】:2022-02-07 15:20:54
【问题描述】:
我想在我的 WCF 服务中的一项异步任务中使用 CancellationToken。实现如下:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Reentrant)]
public partial class MyService: IMyService
{
private void Initialize()
{
_serviceHost = new ServiceHost(this, new Uri[] { new Uri("net.pipe://localhost") });
var binding = new NetNamedPipeBinding();
_serviceHost.AddServiceEndpoint(typeof(IMyService), binding, "MyService");
var behavior = _serviceHost.Description.Behaviors.Find<ServiceBehaviorAttribute>();
behavior.InstanceContextMode = InstanceContextMode.Single;
_serviceHost.Open(); // I get error on this line
}
public async Task<List<object>> DoSomeWorkAsync(CancellationToken ct = default(CancellationToken))
{
//do some work
...
var list = await SomeAwaitableTask(ct);
return list;
}
}
WCF 接口:
[ServiceContract(CallbackContract = typeof(IClientCallback))]
public interface IMyService
{
[OperationContract]
[FaultContract(typeof(ServiceExceptionDTO))]
Task<List<object>> DoSomeWorkAsync(CancellationToken ct = default(CancellationToken));
}
我收到此错误: System.NotSupportedException: '不支持在基于任务的异步方法上使用'System.Threading.CancellationToken'。'
我应该怎么做以及如何在我的异步任务中使用取消令牌?
【问题讨论】:
标签: c# wcf async-await windows-services