public async Task<string> RunAsync(string jobName, IProgress<ProgressUpdate> progress) { var delay = TimeSpan.FromMilliseconds(100); var progressUpdate = new ProgressUpdate(); for (int i = 0; i <= 100; i++) { await Task.Delay(delay); progressUpdate.Percent = i; progressUpdate.LastUpdate = DateTime.UtcNow; if( i < 50) { progressUpdate.Message = "less than half the work is done"; } else { progressUpdate.Message = "almost completing the work"; } progress.Report(progressUpdate); } return String.Format("{0} done!", jobName); }