并发报告进度
问题
当执行操作时,必须报告进度
解决方案
使用IProcess<T>类型和Progress
代码
async Task MyMethodAsync(IProgress<double> progress=null)
{
bool done =false;
double percentComplete=0;
while(!done)
{
...
progress?.Report(percentComplete);
}
}
在调用代码后,可以按下面的方式来使用
async Task CallMyMethodAsync()
{
var progress=new Progress<double>();
progress.ProgressChanged+=(sender,args)=>
{
...
};
await MyMethodAsync(progress);
}
讨论
IProgress
IProgress<T>并非专用于异步代码,在跑长线的同步代码中,不论是进度还是取消也都可以而且应该使用