@@ -326,11 +326,22 @@ public Task<Session> OpenSessionAsync(SessionType type, CancellationToken cancel
326326 /// <seealso cref="Session"/>
327327 public Task < Session > OpenSessionAsync ( SessionConfiguration configuration , CancellationToken cancellationToken = default )
328328 {
329- return OpenSessionInternalAsync ( configuration , null ,
330- configuration . Supports ( SessionOptions . AutoActivation ) , cancellationToken ) ;
329+ ArgumentValidator . EnsureArgumentNotNull ( configuration , nameof ( configuration ) ) ;
330+
331+ SessionScope sessionScope = null ;
332+ try {
333+ if ( configuration . Supports ( SessionOptions . AutoActivation ) ) {
334+ sessionScope = new SessionScope ( ) ;
335+ }
336+ return OpenSessionInternalAsync ( configuration , null , sessionScope , cancellationToken ) ;
337+ }
338+ catch {
339+ sessionScope ? . Dispose ( ) ;
340+ throw ;
341+ }
331342 }
332343
333- internal async Task < Session > OpenSessionInternalAsync ( SessionConfiguration configuration , StorageNode storageNode , bool activate , CancellationToken cancellationToken )
344+ internal async Task < Session > OpenSessionInternalAsync ( SessionConfiguration configuration , StorageNode storageNode , SessionScope sessionScope , CancellationToken cancellationToken )
334345 {
335346 ArgumentValidator . EnsureArgumentNotNull ( configuration , nameof ( configuration ) ) ;
336347
@@ -358,10 +369,13 @@ internal async Task<Session> OpenSessionInternalAsync(SessionConfiguration confi
358369 // connection become opened.
359370 session = new Session ( this , storageNode , configuration , false ) ;
360371 try {
361- await ( ( SqlSessionHandler ) session . Handler ) . OpenConnectionAsync ( cancellationToken ) . ContinueWith ( ( t ) => {
362- if ( activate )
363- session . ActivateInternally ( ) ;
364- } , TaskContinuationOptions . OnlyOnRanToCompletion | TaskContinuationOptions . ExecuteSynchronously ) . ConfigureAwait ( false ) ;
372+ await ( ( SqlSessionHandler ) session . Handler ) . OpenConnectionAsync ( cancellationToken )
373+ . ContinueWith ( t => {
374+ if ( sessionScope != null ) {
375+ session . AttachToScope ( sessionScope ) ;
376+ }
377+ } , TaskContinuationOptions . OnlyOnRanToCompletion | TaskContinuationOptions . ExecuteSynchronously )
378+ . ConfigureAwait ( false ) ;
365379 }
366380 catch ( OperationCanceledException ) {
367381 session . DisposeSafely ( ) ;
0 commit comments