我有一个AsyncDuplexStreamingCall在第一次写入请求流时在服务器端失败。正如我所期望的那样,这将在客户端上导致RpcException。但是,今天,我注意到了UnobservedTaskException并发现我还必须确保响应流不会处于错误状态:
var call = _client.HelloWorld();
try
{
await call.RequestStream.WriteAsync(...); // fails with an RpcException, as expected
...
}
catch (RpcException)
{
// without the following line you get an UnobservedTaskException
// this means you cannot just do using (var call ...) { ... }
await call.ResponseStream.MoveNext().IgnoreUnobservedException();
throw;
}
finally
{
call.Dispose();
}
我的问题是,我是否在API中缺少使它更安全,更笨拙的东西?
现在我有点担心我错过了非显而易见的异常,这些异常最终将导致无法观察到的异常。
Api是否有可能对处理时处于故障状态的所有事物抛出AggregateException,从而不会留下未观察到的异常?
谢谢!