На самом деле в вашем коде нет ничего , ожидающего .Вы немедленно выполняете проверку, и она всегда будет правдой.На самом деле, если вам не повезет, вы почти никогда не достигнете этого точного времени.
Вы можете использовать таймер с этим.
var completed = false;
var timer = new System.Timers.Timer(30 * 1000);
timer.Elapsed += (o,e) =>
{
b.Debit(amount);
completed = true;
this.Status = TransactionStatus.Complete;
};
timer.Start();
this.Status = TransactionStatus.Pending;
while (!completed) ;
ПРИМЕЧАНИЕ Естьнет проверки ошибок, если дебет зависает или время ожидания истекло.