实现IProgress<in T>接口的Progress<int T>类,接收一个Action<T>,通过这个委托显示进度。
服务器端:
public async Task<string> ALongTimeTask()
{
//方法1
//var p = new Progress<int>();
//p.ProgressChanged += (a,count) =>
//{
// Clients.Caller.progressChanged(count);
//};
// var ret = await DoLongRunningThing(p);
//方法2
var progress = new Progress<int>(percent => Clients.Caller.progressChanged(percent));
var ret = await DoLongRunningThing(progress);
return ret;
}
public async Task<string> DoLongRunningThing(IProgress<int> progress)
{
for (int i = 0; i <= 100; i += 5)
{
await Task.Delay(200);
progress.Report(i);
}
return "Job complete!";
}
客户端:
ChatHubProxy.On("progressChanged", (count) =>
{
//display current count;
WriteInfo("Percent: " + count);
});
ChatHubProxy.Invoke("ALongTimeTask");
使用Progress<T>和Action<T>实现远程进度更新
本文档展示了一个服务器端如何通过实现IProgress<int>接口的Progress<int>类,结合Action<T>委托来在执行长时间任务时向客户端报告进度。在服务器端的ALongTimeTask方法中,通过传递一个Action委托到DoLongRunningThing方法,每当进度改变时,就会调用客户端的progressChanged事件,从而实现实时更新进度。客户端则监听progressChanged事件并显示当前进度。
1168

被折叠的 条评论
为什么被折叠?



