AsyncDuplexStreamingCall失败后如何清理?

时间:2020-02-20 14:20:23

标签: c# .net grpc unobserved-exception

我有一个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,从而不会留下未观察到的异常?

谢谢!

0 个答案:

没有答案