将TaskCompletionSource设置为取消状态故障WCF通道

时间:2018-08-20 08:57:47

标签: c# wcf async-await task-parallel-library

我有一个异步WCF操作,在一定条件下我将取消该操作(请参见下文)。但是,此后,我在客户端收到Faulted事件。我还在服务器端配置了一个FaultHandler,但是调用不会转到HandleErrorProvideFault

这是基于Task的WCF操作的默认行为吗?我们不应该在客户端得到OperationCanceledException吗?

示例代码

操作:

Task<MyResult> CalculateResultAsync(SomeParameter parameter);

服务端:

Task<MyResult> CalculateResultAsync(SomeParameter parameter)
{
    TaskCompletionSource<MyResult> tcs = new TaskCompletionSource<MyResult>();

    Task.Run(() => {
        //do something
        //based on some condition cancel tcs
        tcs.SetCanceled();
    });

    return tcs.Task;
}

1 个答案:

答案 0 :(得分:0)

该服务的实现不会更改SOAP协议。

如果服务出现故障(取消),则客户端会收到故障。

此外,在服务器代码上使用Task.Run通常是一种不好的做法,因为它将一个线程池线程换为另一个线程池线程,然后又返回。