私は駐車場アプリを開発しており、30 秒後に利用可能な駐車場セットのタイムアウトが必要です。system.timer を使用してこれを実装しています。これが私のコードです:
internal class UpdateAvailableCarparkCommand
{
private readonly CarParkContext _context;
private readonly ApplicationUser _user;
private readonly DateTime _availableDate;
//constructor
//...
private void SetTimeOut{
//set the timeOut field in the database
var existingCarPark = _context.AvailableCarParks.FirstOrDefault(cp => cp.CarParkOwner.Id == _user.Id && cp.DayAvailable == _availableDate.Date);
existingCarPark.timeOut = true;
_context.SaveChanges();
}
private AvailableCarPark{
//create a new availableCarpark
var availableCarPark = new AvailableCarPark{
//...
//...
}
//After an availableCarpark is created start the timer
//timer wait for 30 seconds then timeout the availableCarpark
_aTimer = new System.Timers.Timer(30000);
// Hook up the Elapsed event for the timer.
_aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
_aTimer.AutoReset = false;
_aTimer.Enabled = true;
return availableCarPark;
}
private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
SetTimeOut();
}
ただし、タイマーで SetTimeOut() が呼び出されることはありません。何が間違っていましたか? System.Threading タイマーも使用しようとしましたが、機能しませんでした。threading.timer の方が優れている場合、どのように実装すればよいですか? 提案をありがとう。