问题标签 [deferred-execution]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 延迟代码执行的最佳方法是什么?
我有许多相互调用的方法,每个方法都必须执行某些任务,其中一些是异步的,它们都在 DOM 上运行(因此任何时候只有一个线程必须访问 DOM)。
例如:
现在假设我有一个方法希望尽可能快地执行方法 A() 1000 次(异步方法可以在单独的线程中运行,但是所有其他代码一次只能访问一个 DOM),所以理想情况下,当达到异步调用 A()、B() 和 C() 的代码执行被暂停,因此可以再次调用 A()。
我可以想到两种方法来做到这一点。一种是使用 yield,通过将所有方法更改为迭代器,我可以暂停和恢复执行:
这种方法对迭代器有相当多的开销,并且代码更密集,但是它都在一个线程上运行,所以我不需要同步 DOM 访问。
另一种方法是使用线程(1000 个并发线程是个坏主意,所以我会实现某种线程池),但这需要同步 DOM 访问,这是昂贵的。
在这些条件下,我可以使用其他方法来推迟代码执行吗?推荐的方法是什么?
python - 应用程序引擎上带有光标的任务链问题。例外:查询偏移量太大。其他人得到这个问题?
我不确定其他人是否有这个问题,但是当我在 appengine 开发服务器上使用游标链接任务时遇到异常“查询偏移量太大”(不确定它是否发生在现场)。
在单个查询中处理了 4000 多条记录后请求游标时发生错误。
我不知道偏移量与游标有什么关系,也许它只是 sdk 中用于应用程序引擎的一个怪癖。
要解决此问题,要么缩短任务延迟之前允许的时间(因此一次处理的记录更少),要么在检查时间过去时,您还可以检查处理的记录数是否仍在范围内。例如,如果 time.time() > end_time 或count == 2000。重置计数并推迟任务。2000 是一个任意数字,我不确定应该是什么限制。
编辑:
进行上述更改后,永远不会完成执行。正在调用 with_cursor(cursor) 代码,但似乎每次都从开头开始。我错过了一些明显的东西吗?
导致异常的代码如下:
表“Transact”有 4800 行。当 time.time() > end_time 为 true 时调用 transacts.cursor() 时会发生错误。在请求游标时已经处理了 4510 条记录,这似乎导致了错误(在开发服务器上,尚未在其他地方测试过)。
希望这可以帮助某人。
谢谢伯特
c# - 使用 linq 时从 WCF 服务返回什么?
使用 LINQ 时我应该从 WCF 服务返回什么?例如:
LINQ 遵循延迟执行,因此该语句在运行 for 循环之前不会执行任何操作。这意味着我不能只返回 res。那我应该返回什么?每次我想从 WCF 服务返回数据时,我是否需要编写一个 for 循环并填充对象并返回它的列表?是否没有与 ADO.NET DataSet 等效的遵循断开式体系结构并且非常适合在不同层之间以及从 Web 服务或 WCF 服务移动数据?
python - 扭曲:`defer.execute` 和 `threads.deferToThread` 之间的区别
defer.execute()
和in 和有什么不一样threads.deferToThread()
?两者都采用相同的参数 - 一个函数和调用它的参数 - 并返回一个 deferred,它将随着调用函数的结果而被触发。
该threads
版本明确声明它将在线程中运行。但是,如果defer
版本没有,那么调用它又有什么意义呢?在反应器中运行的代码永远不会阻塞,因此它调用的任何函数都必须不会阻塞。那时,您可以做defer.succeed(f(*args, **kwargs))
而不是defer.execute(f, args, kwargs)
获得相同的结果。
c# - Linq - 找出延迟执行的最快方法是什么?
找出哪些 .net 框架 linq 方法(例如 .IEnumerable linq 方法)使用延迟执行与哪些不使用延迟执行实现的最快方法是什么。
在多次编码时,我想知道这是否会以正确的方式执行。找出答案的唯一方法是转到 MSDN 文档以确保。是否有任何更快的方法、任何目录、网络上的任何列表、任何备忘单、任何其他可以分享的技巧?如果是,请这样做。这将帮助许多 linq 新手(比如我)少犯错误。唯一的另一种选择是检查文档,直到有人使用它们足以记住(这对我来说很难,我倾向于不记得记录在某处并且可以查找的“任何东西”:D)。
.net - 使用使用返回 IEnumerable
我遇到的有趣问题完全有道理。我有一个像这样的通用方法:
在一种情况下,resultDelegate
的返回类型 ( TResult
) 是IEnumerable<object>
。问题是Run
由于延迟执行,该函数立即返回,处理 SqlDataReader。稍后在代码中,当我尝试通读结果时(委托所做的reader.Read()
,我得到一个InvalidOperationException: Invalid attempt to call Read when reader is closed.
我很难找出解决这个问题的最佳方法。我知道我可以返回一个具体的列表,但如果可能的话,我想避免这种情况。我也可以在委托中移动 using 语句,但是再一次,如果我可以避免对每个委托都这样做,那就太好了。有任何想法吗?
.net - 检查返回类型是否为 IEnumerable
如何检查函数的返回类型是否为IEnumerable<T>
?换句话说,我不想 match List<T>
,即使它实现了IEnumerable<T>
. 或者换一种说法,我如何检测函数是否延迟执行?
linq - 通过 WCF 服务公开 IQueryable
我一直在学习 IQueryable 和延迟加载/延迟执行查询。
是否可以通过 WCF 公开此功能?我想公开一个返回 IQueryable 的 LINQ-to-SQL 服务,然后我可以在客户端执行其他查询,最后使用 .ToList() 执行。OData 格式在这种情况下是否适用?
如果可能的话,这种技术的术语是什么?我可以遵循哪些好的教程?谢谢你。
java - 方法返回后做某事
这是我在伪代码中的情况:
当玩家 1-3 连接时,他们会被添加到玩家列表中,并且 OK 会返回给他们,此时他们将在他们身边设置东西。然而,当玩家 4 连接时,在发送对他的请求的响应之前,所有玩家都会收到他们的牌。因为玩家 4 还没有收到对他的请求的响应,所以他还没有正确初始化并且在收到他的牌时出错。
我想要的是这样的:
有没有通用的模式?onConnect 函数在不同的类中,不应该知道 onRequest 的实现细节。
我专门尝试在 Java 中实现这一点,但欢迎使用通用解决方案。
linq - Linq 延迟执行
我写了一个简单的程序,如下所示,隐藏了一些细节:
我的问题是——显然,当从数据上下文中选择时,执行被推迟。如果您注意到,在“Main”函数的第一条语句中,我从 File.ReadAllLines("accounts.txt") 查询。这是一个糟糕的选择吗?如果我列举最后的结果,这个说法会不会重复?
如果我知道这是一个问题,我可以简单地 .ToArray() 或提前获取结果,但我很想知道幕后发生了什么。