public void DeleteApp(IisApplication application)
 {
     #if ASYNC_TEST
     Thread.Sleep(TimeSpan.FromSeconds(2));
     #elif !ASYNC_TEST
     var deleteTask = Task.Run(() => {
         if (Directory.Exists(application.Path)) {
             Directory.Delete(application.Path, true);
         }
     });
     var dropDbTask = Task.Run(() => {
         if (!string.IsNullOrWhiteSpace(application.DbName)) {
             DatabaseManager.DropDatabase(application.DbName, application.DbConnectionString);
         }
     });
     var deleteAppTask = Task.Run(() => {
         DeleteApplication(application.Name);
     });
     Task.WaitAll(deleteTask, dropDbTask, deleteAppTask);
     #endif
 }
 IisApplication GetApplicationInfo(DirectoryInfo dir)
 {
     var app = new IisApplication {
         Path = dir.FullName,
         Name = dir.Name
     };
     var connectionString = WebConfigUtils.GetConnectionString(app.Path, "db");
     app.CreateDate = WebConfigUtils.GetCreateDate(app.Path);
     var dbSize = DatabaseManager.PingDb(connectionString);
     if (dbSize.HasValue) {
         var builder = new SqlConnectionStringBuilder(connectionString);
         app.DbConnectionString = connectionString;
         app.DbName = builder.InitialCatalog;
         app.DbSize = dbSize.Value;
     }
     return app;
 }