public override async Task <bool> Run() { var itemId = ItemIdDelegate(); CachedWoWItem = Me.CarriedItems.FirstOrDefault(i => (i.Entry == itemId)); if (Query.IsViable(CachedWoWItem)) { // Squelch the timer, so it will be available if the item disappears from our bags... WatchdogTimer_WaitForItemArrival = null; return(false); } // If timer is not spinning, create & start it... if (WatchdogTimer_WaitForItemArrival == null) { WatchdogTimer_WaitForItemArrival = new WaitTimer(TimeSpan.FromMilliseconds(MaxWaitTimeInMillisecondsDelegate())); WatchdogTimer_WaitForItemArrival.Reset(); } // If timer completes, time to call it quits... if (WatchdogTimer_WaitForItemArrival.IsFinished) { QBCLog.ProfileError( "{0} has not arrived in our bag within {1}.", Utility.GetItemNameFromId(itemId), Utility.PrettyTime(WatchdogTimer_WaitForItemArrival.WaitTime)); ActionOnExpiredTimerDelegate(); } else { TreeRoot.StatusText = String.Format( "Waiting {0} for {1} to arrive in our bags.", Utility.PrettyTime(WatchdogTimer_WaitForItemArrival.WaitTime), Utility.GetItemNameFromId(itemId)); } return(true); }