我正在用手写我的WCF代理。如果我取消令牌,第四个函数会起作用吗?我主要想知道在WCF调用结束(asyncToken.IsComplete)之前调用EndLongCall()会不会有问题。我有一种感觉,不调用EndLongCall()是不好的,但是我不确定如果我提前调用它会发生什么(当/如果ct被用信号通知)。我想停止在客户端等待(例如,服务已被通知关闭)。我避免使用TPL (任务)。
public Pack[] LongCall()
{
return Channel.LongCall();
}
public IAsyncResult BeginLongCall(AsyncCallback callback, object asyncState)
{
return Channel.BeginLongCall(callback, asyncState);
}
public Pack[] EndLongCall(IAsyncResult result)
{
return Channel.EndLongCall(result);
}
public Pack[] LongCall(CancellationToken ct)
{
var asyncToken = BeginLongCall(null, null);
WaitHandle.WaitAny(new[] {ct.WaitHandle, asyncToken.AsyncWaitHandle});
return EndLongCall(asyncToken);
}发布于 2018-05-10 23:31:35
提前调用EndLongCall()将导致阻塞,直到异步操作完成。哪个不会实现提前取消。
如果调用EndOperationName时IAsyncResult对象表示的异步操作尚未完成,则EndOperationName将阻塞调用线程,直到异步操作完成。
https://stackoverflow.com/questions/48524974
复制相似问题