コード例 #1
0
        public Task <bool> Begin()
        {
            if (1 == Interlocked.CompareExchange(ref _started, 1, 1))
            {
                throw new InvalidDataException("Can't start the processor twice");
            }

            Utils.Log("Starting Installer Task");
            return(Task.Run(async() =>
            {
                try
                {
                    Utils.Log("Installation has Started");
                    _isRunning.OnNext(true);
                    var task = await _Begin(_cancel.Token);
                    Utils.Log("Vacuuming databases");
                    HashCache.VacuumDatabase();
                    VirtualFile.VacuumDatabase();
                    Utils.Log("Vacuuming completed");
                    return task;
                }
                catch (Exception ex)
                {
                    var _ = Metrics.Error(this.GetType(), ex);
                    throw;
                }
                finally
                {
                    _isRunning.OnNext(false);
                }
            }));
        }