取消WCF中的长呼叫

时间:2018-01-30 15:27:16

标签: c# .net wcf asynchronous

我正在手工编写我的WCF代理。如果取消令牌,第四个功能是否有效?我很想知道在WCF调用完成之前调用EndLongCall()时是否正常(asyncToken.IsComplete)。我明白了,没有调用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);
}

0 个答案:

没有答案