在上下文(SynchronizationContext)中调用进度报告事件。即内部调用的是 m_synchronizationContext.Post() 方法。
using System;
using System.Threading.Tasks;
namespace ConsoleApp11
{
internal class Program
{
static void Main(string[] args)
{
Progress<int> progress = new Progress<int>((value) => {
Console.WriteLine("进度 {0}", value);
});
Task<int> task = Calculate(progress);
int sum = task.Result;
Console.WriteLine("sum={0}", sum);
Console.ReadKey();
}
public static async Task<int> Calculate(IProgress<int> progress)
{
int sum = 0;
for(int i=0; i< 10; i++)
{
await Task.Delay(1000);
sum += i;
progress.Report(i);
}
return sum;
}
}
}
运行测试