/// <summary> /// Invokes the specified action after the specified delay in milliseconds. /// Note: Be sure to wrap the action code in a try catch, /// as exceptions raised by the action are not handled. /// </summary> /// <param name="context"> /// The context on which the action will be invoked.</param> /// <param name="action"> /// The action to execute once the delay expires.</param> /// <param name="delayMs"> /// The time, in milleseconds, to wait before executing the action.</param> public static async Task PostWithDelayAsync( this ISynchronizationContext context, Action action, int delayMs, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = 0) { AssertArg.IsNotNull(context, nameof(context)); AssertArg.IsNotNull(action, nameof(action)); AssertArg.IsGreaterThan(-1, delayMs, nameof(delayMs)); if (delayMs >= 0) { await Task.Delay(delayMs); } await context.PostAsync( action, memberName, filePath, lineNumber); }