在ASP.NET Core应用程序中,可以使用IProgress
和Progress
类来报告异步void
方法的进度。下面是一个示例代码:
首先,定义一个ProgressReport
类来存储进度信息:
public class ProgressReport
{
public int PercentComplete { get; set; }
public string Message { get; set; }
}
然后,在控制器中定义一个异步方法并使用IProgress
来报告进度:
public class HomeController : Controller
{
public async Task Index()
{
var progress = new Progress(report =>
{
// 处理报告的进度信息,例如更新UI
ViewData["Progress"] = report.PercentComplete;
ViewData["Message"] = report.Message;
});
await LongRunningMethodAsync(progress);
return View();
}
private async Task LongRunningMethodAsync(IProgress progress)
{
// 模拟一个耗时的操作
for (int i = 0; i <= 100; i += 10)
{
await Task.Delay(1000); // 模拟耗时的操作
// 报告进度
progress?.Report(new ProgressReport
{
PercentComplete = i,
Message = $"Processing {i}%"
});
}
}
}
在视图中,可以通过ViewData["Progress"]
和ViewData["Message"]
来显示进度信息:
@{
var progress = (int)ViewData["Progress"];
var message = (string)ViewData["Message"];
}
Progress: @progress%
@message
这样,在访问Index
方法时,将会异步地执行LongRunningMethodAsync
方法,并使用IProgress
来报告进度信息。通过更新ViewData
的值,可以在视图中实时显示进度。