public async void FreeSlot(FreeSlot freeslot)
        {
            Console.WriteLine("[Downloadanager] FreeSlot");

            int downloading = _repo.CountByState(State.Downloading);

            if (downloading >= _maxdownload)
            {
                await _bus.SendAsync <QueueFull> (new QueueFull {
                    Downloading = downloading,
                    MaxDownload = _maxdownload
                });

                return;
            }

            Download waiting;
            bool     dequeued = _repo.FirstByState(State.Waiting, out waiting);

            if (!dequeued)
            {
                await _bus.SendAsync <QueueEmpty> (new QueueEmpty());

                return;
            }

            bool resumed = waiting.TryResume();

            if (!resumed)
            {
                await _bus.SendAsync <DownloadError> (new DownloadError {
                    Id    = waiting.Id,
                    State = waiting.State,
                    Error = ErrorEnum.FreeSlot_InvalidState
                });

                return;
            }
            _repo.Update(waiting);

            var queuedownload = new QueueDownload {
                Download = waiting
            };
            await _bus.SendAsync <QueueDownload> (queuedownload);
        }
		public async void FreeSlot(FreeSlot freeslot) {

			Console.WriteLine("[Downloadanager] FreeSlot");

			int downloading = _repo.CountByState (State.Downloading);
			if (downloading >= _maxdownload) {
				await _bus.SendAsync<QueueFull> (new QueueFull{
					Downloading = downloading,
					MaxDownload = _maxdownload
				});
				return;
			}

			Download waiting;
			bool dequeued = _repo.FirstByState (State.Waiting, out waiting);
			if (!dequeued) {
				await _bus.SendAsync<QueueEmpty> (new QueueEmpty());
				return;
			}

			bool resumed = waiting.TryResume ();
			if (!resumed) {
				await _bus.SendAsync<DownloadError> (new DownloadError {
					Id = waiting.Id,
					State = waiting.State,
					Error = ErrorEnum.FreeSlot_InvalidState
				});
				return;
			}
			_repo.Update (waiting);

			var queuedownload = new QueueDownload {
				Download = waiting
			};
			await _bus.SendAsync<QueueDownload> (queuedownload);
		}