Невозможно преобразовать из 'void' в System.Threading.Tasks.Task <System.Action> - PullRequest
0 голосов
/ 28 июня 2018

Я написал общий метод, используя Hangfire .Net. По сути, я хочу добиться того, чтобы я сгенерировал один метод и хочу вызывать его несколько раз, когда это потребуется. Мой вспомогательный метод ниже:

 public static void ScheduleBackGroundJob(Task<Action> _refmethod, DateTime _dateTime)
    {
        try
        {
            var _currentDate = DateTime.Now;
            TimeSpan _timeSpan = _dateTime - _currentDate;
            BackgroundJob.Schedule(() => _refmethod, _timeSpan);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

Я хочу вызвать этот метод, используя вот так

HangfireHelper.ScheduleBackGroundJob(_service.UpdateAuctionStatus(result), result.PlannedCloseDate);

Мой метод updateAuctionStatus приведен ниже.

public void UpdateAuctionStatus(AuctionReturnModel model)
    {
        try
        {
            var _auction = (from d in _db.Auction_Detail where d.Id == model.AuctionDetailId select d).FirstOrDefault();
            _auction.isEnded = true;
            _db.Auction_Detail.Add(_auction);
            _db.SaveChanges();

            var _auctionHistory = new AuctionHistory { AuctionDetail_Id = model.AuctionDetailId, EndedDate = DateTime.Now, EndedMethod = "Automatic" };
            _db.AuctionHistory.Add(_auctionHistory);
            _db.SaveChanges();

            Task.WaitAll();

        }
        catch (Exception ex)
        {
           throw ex;
        }
    }

Моя ошибка выше не может быть преобразована в void. Я хочу вызвать его, отправив любой метод в качестве параметра.

1 Ответ

0 голосов
/ 28 июня 2018

Я сделал это, изменив мои методы, как

 public static void ScheduleBackGroundJob(Expression<Action> _refmethod, DateTime _dateTime)
    {
        try
        {
            var _currentDate = DateTime.Now;
            TimeSpan _timeSpan = _dateTime - _currentDate;
            BackgroundJob.Schedule(_refmethod, _timeSpan);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

Вызов кода помощника Hangfire

 HangfireHelper.ScheduleBackGroundJob(() => _service.UpdateAuctionStatus(result), result.PlannedCloseDate);

Мой метод обслуживания, который я изменил

  public async Task UpdateAuctionStatus(AuctionReturnModel model)
    {
        try
        {
            var _auction = await (from d in _db.Auction_Detail where d.Id == model.AuctionDetailId select d).FirstOrDefaultAsync();
            _auction.isEnded = true;
            _db.Auction_Detail.Add(_auction);
            _db.SaveChanges();

            var _auctionHistory = new AuctionHistory { AuctionDetail_Id = model.AuctionDetailId, EndedDate = DateTime.Now, EndedMethod = "Automatic" };
            _db.AuctionHistory.Add(_auctionHistory);
            _db.SaveChanges();

            Task.WaitAll();

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

Надеюсь, это поможет вам в будущем. Любые обзоры кода и лучшие практики будут высоко оценены, потому что я всегда стремлюсь узнать что-то новое и лучшие подходы для решения проблем.

...