Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从';无效';到System.Threading.Tasks.Task<;系统行动>;_C#_.net_Entity Framework_Hangfire - Fatal编程技术网

C# 无法从';无效';到System.Threading.Tasks.Task<;系统行动>;

C# 无法从';无效';到System.Threading.Tasks.Task<;系统行动>;,c#,.net,entity-framework,hangfire,C#,.net,Entity Framework,Hangfire,我已经使用hangfire.Net编写了通用方法。基本上,我想实现我已经生成了一个方法,并希望在需要时多次调用它。我的助手方法如下: public static void ScheduleBackGroundJob(Task<Action> _refmethod, DateTime _dateTime) { try { var _currentDate = DateTime.Now; TimeS

我已经使用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;
        }
    }
下面是我的UpdateActionStatus方法

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;
        }
    }

我的上述错误无法转换为无效。我想通过将任何方法作为参数发送来调用它。

我已经通过如下更改我的方法来完成

 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;
        }
    }
我的服务方式我已经改变了

  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;
        }
    }

希望这对你将来有所帮助。任何代码审查和最佳实践都将受到高度赞赏,因为我总是希望学习一些新的更好的方法来解决问题。

Task.WaitAll();-->在这种情况下,这没有任何作用。不确定它是否会导致错误您没有传递方法,您正在尝试调用
\u service.updateActionStatus(result)
,并将其返回值(即
void
)传递给预期
任务的参数,因此出现错误。您的参数可能只是一个
操作
,而不是
任务
,然后您可以传递
()=>\u service.updateActionStatus(结果)
相反。当我将其转换为任务时,它会给我错误调用background.schedule job,并在我执行时传递Action参数。基本上,我想要实现的是重用HangfireHelper.ScheduleBackGroundJob()方法。我们将非常感谢您的帮助。
 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;
        }
    }