小编ant*_*tak的帖子

如何创建发布到给定SynchronizationContext的任务?

给定a SynchronizationContext,我已经拥有(并且基本上是特定线程的窗口),如何创建Task发布到此上下文的s?

作为参考,这里是一个非常基本的演示如何SynchronizationContext设置.

public class SomeDispatcher : SynchronizationContext
{
    SomeDispatcher() {

        new Thread(() => {

            SynchronizationContext.SetSynchronizationContext(this);

            // Dispatching loop (among other things)

        }).Start();
    }

    override void Post(SendOrPostCallback d, object state)
    {
        // Add (d, state) to a dispatch queue;
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于已在上下文中运行的异步/等待.

现在,我希望能够Task从外部上下文(例如,从UI线程)发布s,但似乎无法找到一种干净的方式来做到这一点.

一种方法是使用TaskCompletionSource<>.

Task StartTask(Action action)
{
    var tcs = new TaskCompletionSource<object>();
    SaidDispatcher.Post(state => {
        try
        {
            action.Invoke();
            tcs.SetResult(null);
        }
        catch (Exception ex)
        { …
Run Code Online (Sandbox Code Playgroud)

c# async-await

3
推荐指数
1
解决办法
192
查看次数

“INSERT ... ON DUPLICATE KEY UPDATE”的性能与“UPDATE”的比较

99% 的情况下,单个就足够了,但不到 0.01% 的情况下,我需要在同一键上UPDATE跟进。INSERT这可以写成一个单一的INSERT ... ON DUPLICATE KEY UPDATE,但就性能而言,我应该吗?

问题基本上是INSERT ... ON DUPLICATE KEY UPDATEs 是否预计比UPDATEMySQL 中的 s 慢。

一些代码来演示:

代码使用UPDATE

UPDATE foo SET seq = @new_seq WHERE id = X AND seq = @prev_seq;

IF rows_changed = 0 THEN
    INSERT INTO foo (id, seq) VALUES (X, @new_seq)
    IF <duplicate key error> THEN
        -- handle collusion
    END IF
END IF
Run Code Online (Sandbox Code Playgroud)

代码使用INSERT ... ON DUPLICATE KEY UPDATE

INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

mysql

3
推荐指数
1
解决办法
3921
查看次数

仅命名`git branch --list`的选项?

git branch输出一个分支列表,但也输出其他面向人的绒毛,如*当前分支旁边的星号().

$ git branch
* (HEAD detached at origin/master)
  branch_foo
  some/branch_bar
Run Code Online (Sandbox Code Playgroud)

如何获得更多机器可解析的输出(例如,只是分支的名称)以供脚本使用等?

git

2
推荐指数
2
解决办法
1164
查看次数

在分配之前,memset()是一个std :: iterator变量是否安全?

这段代码安全吗?

int main() {

    struct {
        int foo;
        int bar;
        std::list<...>::iterator it;
    } foobar;

    memset(&foobar, 0, sizeof(foobar));

    foobar.it = ...;
}
Run Code Online (Sandbox Code Playgroud)

我认为它是安全的,因为std::iterator似乎没有覆盖operator=.这是一个有效的推理吗?

c++ std

1
推荐指数
2
解决办法
255
查看次数

如何从elasticsearch中排除"指纹"字段

我正在使用fingerprintLogstash中的过滤器来创建我在输出中设置的指纹字段.document_idelasticsearch

配置如下:

filter {
  fingerprint {
    method => "SHA1"
    key => "KEY"
  }
}

output {
  elasticsearch {
    host => localhost
    document_id => "%{fingerprint}"
  }
}
Run Code Online (Sandbox Code Playgroud)

这导致fingerprintElasticsearch 中的冗余字段具有与之相同的值_id.如何防止将此冗余字段保存到ES?

elasticsearch logstash

1
推荐指数
1
解决办法
2194
查看次数

如何重定向`cat`来模拟linux中的用户输入

我开始了一个项目.在编写指令时,我们可以使用以下命令行测试程序:

cat test.txt> test.py

但我没有输出.据我所知,它应该给我一个输出.

test.txt文件如下所示:

1
3
4
2
5
6
7
1
1
8
9
3
4
5
1
-1
Run Code Online (Sandbox Code Playgroud)

test.py文件看起来像:

for i in range(16):
    var=raw_input("type something : ")
    print var
Run Code Online (Sandbox Code Playgroud)

我正在使用此命令行将test.txt文件的内容重定向到运行时的test.py文件.

我已经阅读了有关cat命令的文档.

请问你能帮帮我吗 ?

换句话说,cat命令应该如何模拟用户?我想我必须在我的python文件中改变一些东西.

提前谢谢,Mff

linux cat

0
推荐指数
1
解决办法
809
查看次数

如何将ieee754双倍转换为两个整数的分数?

如何获得long long(64位)值abdouble(64位)值d,使得(double)a / b更多或更少的平等d?这可能吗(不会失去精确度)?

我已经尝试过这个但是它没有得到任何地方,所以我想也许我有错误的想法:

union ieee754_double u;
u.d = d;

long long a = (long long)u.ieee.mantissa0 << 32 | u.ieee.mantissa1;
long long b = (long long)1 << (u.ieee.exponent + IEEE754_DOUBLE_BIAS);
Run Code Online (Sandbox Code Playgroud)

c floating-point

0
推荐指数
1
解决办法
276
查看次数

标签 统计

async-await ×1

c ×1

c# ×1

c++ ×1

cat ×1

elasticsearch ×1

floating-point ×1

git ×1

linux ×1

logstash ×1

mysql ×1

std ×1