void SomeFunction()
        {
            StreamWriter    someFile             = new StreamWriter(somePath);
            DisposableThing someDisposableThing1 = null;
            DisposableThing someDisposableThing2 = null;

            try
            {
                lock (someCriticalSection)
                {
                    someDisposableThing1 = new DisposableThing();
                    DoSomething();
                    someDisposableThing2 = new DisposableThing();
                    lock (someOtherCriticalSection)
                    {
                        DoSomethingMore();
                    }
                }
            }
            catch (Exception e)
            {
                Log(e);
            }
            finally
            {
                // requires SafeDispose extension method
                someFile.SafeDispose();
                someDisposableThing1.SafeDispose();
                someDisposableThing2.SafeDispose();
            }
        }
        public async Task RequestServicesAreDisposedAsynOnCompleted()
        {
            var serviceProvider = new AsyncDisposableServiceProvider(new ServiceCollection()
                                                                     .AddTransient <DisposableThing>()
                                                                     .BuildServiceProvider());

            var             scopeFactory = serviceProvider.GetRequiredService <IServiceScopeFactory>();
            DisposableThing instance     = null;

            var context = new DefaultHttpContext();

            context.ServiceScopeFactory = scopeFactory;
            var responseFeature = new TestHttpResponseFeature();

            context.Features.Set <IHttpResponseFeature>(responseFeature);

            Assert.NotNull(context.RequestServices);
            Assert.Single(responseFeature.CompletedCallbacks);

            instance = context.RequestServices.GetRequiredService <DisposableThing>();

            var callback = responseFeature.CompletedCallbacks[0];
            await callback.callback(callback.state);

            Assert.Null(context.RequestServices);
            Assert.True(instance.Disposed);
            var scope = Assert.Single(serviceProvider.Scopes);

            Assert.True(scope.DisposeAsyncCalled);
            Assert.False(scope.DisposeCalled);
        }
        void SomeFunction()
        {
            StreamWriter someFile;

            try
            {
                someFile = new StreamWriter(somePath);
                lock (someCriticalSection)
                {
                    using (var someDisposableThing1 = new DisposableThing())
                    {
                        DoSomething();
                        using (var someDisposableThing2 = new DisposableThing())
                        {
                            lock (someOtherCriticalSection)
                            {
                                DoSomethingMore();
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Log(e);
            }
            finally
            {
                if (someFile != null)
                {
                    someFile.Dispose();
                }
            }
        }
Esempio n. 4
0
 public static void UseDisposableThing()
 {
     using (var foo = new DisposableThing())
     {
         foo.DoSomething();
     }
 }
Esempio n. 5
0
        public async Task RequestServicesAreDisposedOnCompleted()
        {
            var serviceProvider = new ServiceCollection()
                                  .AddTransient <DisposableThing>()
                                  .BuildServiceProvider();

            var             scopeFactory = serviceProvider.GetRequiredService <IServiceScopeFactory>();
            DisposableThing instance     = null;

            var middleware = new RequestServicesContainerMiddleware(
                ctx =>
            {
                instance = ctx.RequestServices.GetRequiredService <DisposableThing>();
                return(Task.CompletedTask);
            },
                scopeFactory);

            var context         = new DefaultHttpContext();
            var responseFeature = new TestHttpResponseFeature();

            context.Features.Set <IHttpResponseFeature>(responseFeature);

            await middleware.Invoke(context);

            Assert.NotNull(context.RequestServices);
            Assert.Single(responseFeature.CompletedCallbacks);

            var callback = responseFeature.CompletedCallbacks[0];
            await callback.callback(callback.state);

            Assert.Null(context.RequestServices);
            Assert.True(instance.Disposed);
        }
 void ExecuteCriticalSection()
 {
     using (var someDisposableThing1 = new DisposableThing())
     {
         DoSomething();
         ExecuteFinalCriticalSection();
     }
 }
 void ExecuteFinalCriticalSection()
 {
     using (var someDisposableThing2 = new DisposableThing())
     {
         lock (someOtherCriticalSection)
         {
             DoSomethingMore();
         }
     }
 }
Esempio n. 8
0
            public static IEnumerable <int> GetRandomNumbers()
            {
                var rand = new Random();

                // can use "using" with yield
                using (var dt = new DisposableThing())
                {
                    while (true)
                    {
                        yield return(rand.Next());
                    }
                }
            }
Esempio n. 9
0
 public Task Send()
 {
     return(Task.Run(() =>
     {
         using (DisposableThing client = new DisposableThing())
         {
             using (DisposableThing message = DoAsync().Result)
             {
                 DisposableThing resultAsString = DoTask().Result;
             }
         }
     }));
 }
 void SomeFunction()
 {
     using (var someFile = new StreamWriter(somePath)) {
         try {
             lock (someCriticalSection) {
                 using (var someDisposableThing1 = new DisposableThing()) {
                     DoSomething();
                 }
             }
         } catch (Exception e) {
             Log(e);
         }
     }
 }
 public static void UseDisposableThing()
 {
     try
     {
         using (Foo = new DisposableThing())
         {
             Foo.DoSomething();
         }
     }
     finally
     {
         Foo = null;
     }
 }