首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消WCF中的长呼叫

取消WCF中的长呼叫
EN

Stack Overflow用户
提问于 2018-01-30 23:27:16
回答 1查看 70关注 0票数 0

我正在用手写我的WCF代理。如果我取消令牌,第四个函数会起作用吗?我主要想知道在WCF调用结束(asyncToken.IsComplete)之前调用EndLongCall()会不会有问题。我有一种感觉,不调用EndLongCall()是不好的,但是我不确定如果我提前调用它会发生什么(当/如果ct被用信号通知)。我想停止在客户端等待(例如,服务已被通知关闭)。我避免使用TPL (任务)。

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

发布于 2018-05-10 23:31:35

提前调用EndLongCall()将导致阻塞,直到异步操作完成。哪个不会实现提前取消。

如果调用EndOperationName时IAsyncResult对象表示的异步操作尚未完成,则EndOperationName将阻塞调用线程,直到异步操作完成。

https://docs.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/asynchronous-programming-model-apm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48524974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档