The Solace API for .NET is a managed interface for a native C library. It follows the disposable pattern for memory management on all the native objects. That is, best practice is Session objects should be explicitly disposed by calling Dispose(). That said you may just let the object go out of scope and the API will do it’s best. Your mileage may vary.
However, it is not possible to Dispose() the session from a callback, as this is in effect destroying the object while within a method on that object. Your main business logic will need to Dispose() of the Session.
You likely already have certain states, events, or triggers that cause it to Dispose() the session, so the DownError event is just one more. You can add it to your event/message processing queue, to be handled in the main thread of your application, and Dispose() the session from there.