【发布时间】:2020-09-03 10:18:30
【问题描述】:
在 javascript 中,当方法调用自身时,可以通过将递归调用包装在 setTimeout 中来防止“递归过多”错误。例如,此事件处理程序使用array.shift() 和递归而不是循环,一次将一项添加到可淘汰的可观察数组中:
$(document).on("AddPizzaFan", function (event, data, results) {
var item = data.shift();
var fan = new PizzaFan(
item['firstname'],
item['lastname'],
item['favoritePizzaTopping']
)
myObservableArray.push(fan);
if (data.length > 0) {
setTimeout(function () { $(document).trigger("AddPizzaFan", [data, myObservableArray]); }, 1);
}
});
这种方法允许绑定到 KO observable 的 UI 组件一次更新一个数据行,即使 data 包含数千行并且可能需要 5 或 10 甚至 60如果 data 数组只是一次性全部输入到 UI,则会出现几秒钟或更长时间。当数组以许多小位被馈送到 UI 时,用户立即开始在屏幕上看到数据。 (FWIW,实际应用是文本语料库搜索,其中返回许多包含用户搜索词或搜索短语的文本段落。)
可以在 C# 中使用 Stack 和异步 await 完成与此类似的操作吗?阅读this question and answer,似乎不能,至少不容易。如果可以在 C# 中做类似的事情,它是如何实现的?
【问题讨论】:
-
您使用的是哪种用户界面? Windows 窗体? Windows Presentation Foundation?
-
您不需要依赖 JavaScript 技巧。 c# 有很多处理线程和异步编程的能力。忘记那些技巧,拥抱 c# 方法
-
@JesúsLópez:这正是我的问题。对应的 C# 方法有哪些。
-
@JesúsLópez:我的 UI 是 Blazor,在这里我是个完全的新手。
-
Blazor 服务器还是 Blazor WebAssembly?
标签: c# knockout.js