首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PQ - Function.InvokeAfter() -实际延迟

PQ - Function.InvokeAfter() -实际延迟
EN

Stack Overflow用户
提问于 2016-02-20 16:45:40
回答 2查看 631关注 0票数 0

试图计算InvokeAfter-function的执行之间的实际延迟。

函数应该每秒触发五次。

代码语言:javascript
复制
index  delay now
0      0     18:47:33
1      0     18:47:33
2      0     18:47:33
3      0     18:47:33
4      0     18:47:33
5      1     18:47:34
6      1     18:47:34
7      1     18:47:34
8      1     18:47:34
9      1     18:47:34
10     2     18:47:35
11     2     18:47:35
12     2     18:47:35
13     2     18:47:35
14     2     18:47:35
...

但我明白

real_delay是该行与前一行之间的区别。

代码

代码语言:javascript
复制
let
    t = Table.FromList({0..19}, Splitter.SplitByNothing()),
    delay = Table.AddColumn(t, "delay", each Number.IntegerDivide([Column1], 5)),
    InvokeAfter = Table.AddColumn(delay, "InvokeTimeNow", each Function.InvokeAfter(
        ()=>DateTime.Time(DateTime.LocalNow()), #duration(0,0,0,[delay]))
    ),
    real_delay = Table.AddColumn(InvokeAfter, "real_delay", each try InvokeAfter{[Column1=[Column1]-1]}[InvokeTimeNow]-[InvokeTimeNow] otherwise "-")
in
    real_delay

代码有什么问题?或者使用InvokeAfter函数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-21 22:08:00

每秒5次意味着您应该等待(第二/5次)= 0.2小数秒每次调用。

如果运行此代码:

代码语言:javascript
复制
let
    t = Table.FromList({0..19}, Splitter.SplitByNothing()),
    delay = Table.AddColumn(t, "delay", each 0.2),
    InvokeAfter = Table.AddColumn(delay, "InvokeTimeNow", each Function.InvokeAfter(
        ()=>DateTime.Time(DateTime.LocalNow()), #duration(0,0,0,[delay]))
    ),
    real_delay = Table.AddColumn(InvokeAfter, "real_delay", each try InvokeAfter{[Column1=[Column1]-1]}[InvokeTimeNow]-[InvokeTimeNow] otherwise "-")
in
    real_delay

您将看到该函数每秒被调用大约5次。

票数 0
EN

Stack Overflow用户

发布于 2016-02-22 18:45:00

==溶液==

这是我自己的解决方案。一个令人惊讶的,我想..。

新码

代码语言:javascript
复制
let
    threads=5,
    t = Table.FromList({0..19}, Splitter.SplitByNothing()),
    delay = Table.AddColumn(t, "delay", each if Number.Mod([Column1], threads)=0 and [Column1]>0 then 1 else 0),
    InvokeAfter = Table.AddColumn(delay, "InvokeTimeNow", each Function.InvokeAfter(()=>DateTime.Time(DateTime.LocalNow()), #duration(0,0,0,[delay]))),
    real_delay = Table.AddColumn(InvokeAfter, "real_delay", each try InvokeAfter{[Column1=[Column1]-1]}[InvokeTimeNow]-[InvokeTimeNow] otherwise "-")
in
    real_delay

最初的想法是多线程解析。同时连接也有一些限制,所以我不得不适应。

我认为有一个“零开始”时刻,在此之后调用函数--计算单元格的时刻(几乎同时计算所有单元格)。第二个参数表示在这个起始点之后的延迟。但它似乎累积了所有的延迟。很奇怪的行为,伊豪..。

所以我解决了这个问题,但仍然不明白为什么

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35526080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档