gpt4 book ai didi

c# - 使用 SignalR 和 IProgress 接口(interface)的进度报告

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:22 24 4
gpt4 key购买 nike

我有一个 Hub 类,它有一个长时间运行的方法,我需要在它工作时显示一个进度条。

我读了this article我认为可以在异步方法中使用 IProgress 接口(interface)来发送长时间运行的操作状态。

我写了这样一个方法:

    public async Task<string> GetServerTime(IProgress<int> prog)
{
await Task.Run(() => {
for (int i = 0; i < 10; i++)
{
prog.Report(i * 10);
System.Threading.Thread.Sleep(200);
}
});

return DateTime.Now.ToString();
}

然后我尝试调用这样的方法:

 var appHub = $.connection.appHub;
$.connection.hub.start();
appHub.server.getServerTime()
.done(function (time) {
alert(time);
});

但是我不知道怎样才能得到进度报告。

最佳答案

您可以 use progress ,因此:

var appHub = $.connection.appHub;
$.connection.hub.start().done(function() {
appHub.server.getServerTime()
.progress(function (update) { alert(update); })
.done(function (time) { alert(time); });
});

附带说明一下,在服务器端对 CPU 绑定(bind)代码使用 Task.Run 毫无意义。您的服务器端代码可以很容易地是:

public string GetServerTime(IProgress<int> prog)
{
for (int i = 0; i < 10; i++)
{
prog.Report(i * 10);
System.Threading.Thread.Sleep(200);
}

return DateTime.Now.ToString();
}

如果服务器端方法有真正的异步工作要做(通常是 I/O 绑定(bind)操作),则它们应该只async。作为一般规则,避免在服务器端使用 Task.Run

关于c# - 使用 SignalR 和 IProgress 接口(interface)的进度报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40110868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com